背景情報:
ローカル ギャラリーとサーバー ギャラリーの 2 つのギャラリーを含む iOS アプリケーションをプログラムします。ユーザーがサーバー ギャラリーを更新してローカル ギャラリーにマージすると、アプリは新しい画像のみをダウンロードする必要があります。
メモリ消費を最小限に抑えるために、画像を保存し、ImageEntity
次の属性を持つクラスのインスタンスで配列を埋めます: fileName、filePath & VotingStatus。
次のロジックを使用して、イメージが既に存在するかどうかを確認しようとしました。
for (ImageEntity *imageEntity in self.serverImagesArray) {
if (![self.localImagesArray containsObject:imageEntity]){
[self.localImagesArray addObject:imageEntity];
}
}
ただし、各エンティティは個別のオブジェクトであるため、常に追加されます。ただし、各エンティティには一意のfileNameがあります。
質問:関数を
拡張して[NSArray containsObject:]
、配列内の 1 つのオブジェクトに「someValue」と等しい属性があるかどうかを確認することはできますか? (Cocoa-Bindings を ArrayController と組み合わせて使用すると、配列要素の属性を割り当てることができます。これと同様の属性にアクセスしたいと思います)。
ローカル配列の各エンティティをサーバー配列の各要素と比較できることを知っています。ただし、 O(n^2) 回の比較を行う必要があり、ギャラリーには数百の画像が含まれる場合があります。
おまけの質問:気づかないうちにすでにこれを行っていますか? Apple によるこの機能の実装について詳細を知っている人はいますか? ファンシーな実装がありますか、それともすべての要素を比較する配列を反復処理しているだけですか?