0

私はメッセージングアプリ(WhatsAppのようなもの)を開発しています。ユーザーはテキストメッセージと画像メッセージを相互に送信できます。

Messageのサブクラスであるオブジェクトを作成して、 sender_name、timestemp、message_text、message_image(画像メッセージの場合)NSManagedObjectなどのメッセージの詳細を保存しました。 *画像の平均サイズは、iPhoneカメラロールライブラリから取得した画像のサイズと同じです。

最初の質問は次のとおりです。
画像をCoreDataに保存するのは良い考えですか、それともファイルシステムに保存する方がよいでしょうか。

問題は、チャットビューで、tableViewをスクロールして古いメッセージを表示しているときに、コアデータからロードする画像があると、スクロールのパフォーマンスが非常に悪くなることです。

NSFetchedResultsControllerメッセージをフェッチするためにを使用していますが、一度にフェッチするのは30個以下です。を格納するMessageImageオブジェクト(サブクラスも)を作成して、パフォーマンスを向上させようとしました。オブジェクトはと1対1の関係にあります 。これを行ったので、フェッチャーがCore Dataから30個のメッセージをロードすると、UIImage自体は要求されるまでロードされません。しかし、それでもパフォーマンスが悪くなります...NSManagedObjectUIImage
MessageMessageImage

したがって、2番目の質問は次のとおり
です。スクロールパフォーマンスを向上させるために何ができますか?

4

2 に答える 2

2

画像のサムネイルを作成します。これは、スクロール ビューでスケーリングされる正確なサイズです。この方法では、すべての高解像度画像を読み取る必要がなく、スケーリングする必要もありません。サムネイルは Core Data またはファイル システムに保存できます。大きな違いはないと思います。ただし、高解像度のオリジナルは必ずファイル システムに保存してください。ユーザーが画像をタップすると、それらを読み込んで元のフルスクリーンを表示できます。

于 2012-07-21T19:25:52.113 に答える
1

アイコンサイズなどよりも大きいコアデータに画像を保存しないことをお勧めします。それらをファイル システムに格納します。パフォーマンス面: GCD を使用してバックグラウンドで画像を読み込み、読み込まれるとすぐにメイン スレッドに表示できます。ブロックを使用してバックグラウンド スレッドから画像をロードするこちらをご覧ください

于 2012-07-21T19:23:08.777 に答える