メールアドレスを含むデータを Web API から取得する iPhone アプリを作成しています。表のセルに各電子メール アドレスに関連付けられた画像を表示したいので、アドレス帳で画像を検索し、電子メール アドレスが本にない場合はデフォルトに戻ります。これはうまく機能しますが、いくつかの懸念があります。
パフォーマンス: 電子メール アドレス (または電話番号) でアドレス帳のレコードを検索するために私が見つけたレシピは、かなり遅いと報告されています。この理由は、アドレス帳のすべてのレコードを反復処理し、画像を持つレコードごとに、すべての電子メール アドレスを反復処理して一致を見つける必要があるためです。もちろん、大きなアドレス帳の場合、これには時間がかかります。
表のセル: そこで、画像を検索する必要があるすべての電子メール アドレスを集めて、それらを一度にすべて検索しようと考えました。このようにして、すべてのアドレスに対して本を 1 回だけ反復処理します。しかし、これは、各セルが 1 つの電子メール アドレスに対応する表のセルではうまく機能しません。セルを表示する前にすべての画像を収集する必要があります (遅くなる可能性があります)。または、各セルが読み込まれるときに各画像を検索する必要があります (それぞれの一致を見つけるために本を反復処理する必要があるため、さらに遅くなります)。メールアドレス)。
非同期ルックアップ:それで、
NSInvocationOperation. AddressBook で見つかった各画像のサムネイルをアプリのサンドボックスに保存します。次に、各セルはこのファイルを参照し、存在しない場合はデフォルトを表示できます (ブックにないか、まだ見つかっていないため)。画像が後で非同期ルックアップで見つかった場合、次に画像を表示する必要があるときに突然表示されます。これは、イメージを定期的に再生成する場合 (たとえば、アドレス帳でイメージが変更された場合) に適しています。しかし、私のアプリの特定のインスタンスでは、画像が実際にはしばらく表示されない場合があります。非同期テーブル セル ルックアップ: 理想的には、markjnet の非同期テーブル セル更新のようなものを使用して、ダウンロードされた画像でテーブル セルを更新します。
NSInvocationOperationしかし、これが機能するためには、セルが表示され、キャッシュされたアイコンがサンドボックスにない場合に、セルごとにジョブをスピンオフする必要があります。しかしその後、アドレス帳全体を 1 つずつ非効率的に反復処理することに戻ります。大量の新しい電子メール アドレスをダウンロードしただけの場合は、大量のアドレスになる可能性があります。
だから私の質問は:他の人はこれをどのように行うのですか?私は Tweetie2 をいじっていましたが、表示された表のセルを非同期的に更新しているようです。必要な画像ごとに個別のHTTPリクエストを送信していると思います。もしそうなら、電子メール アドレスでローカル アドレス帳を検索することはそれほど効率的ではないと思うので、おそらくそれが最善の方法でしょうか? アドレス帳の検索に関連するパフォーマンスの問題について心配する必要はありませんか?
もしそうなら、サムネイル画像をサンドボックスに保存するのがキャッシングの最善の方法ですか? また、アドレス帳の変更に合わせてすべてのサムネイルを 1 日 1 回更新する新しいジョブを作成したい場合、どのように行うのが最善の方法でしょうか?
残りの皆さんは、この種の問題をどのように解決しますか? 提案をいただければ幸いです。