3

主なコンテンツが画像であるアプリを構築することを計画しています。基本的に、 を使用して複数のメニューがUITableViewsあり、そのセルには画像のみが含まれます。セルをクリックすると、その画像と別の画像を含む単純なビューが表示され、残りの詳細なコンテンツが表示されます。

これはすべて非常に簡単に行うことができます。私の質問は最適化に関するものです。大量のコンテンツ (おそらく 1,000 行) があり、画像を に表示するUITableViewので、Core Data は必須です (遅延読み込みと他のいくつかの最適化を考えると)。

私の質問は次のとおりです。イメージをCore Datadb に保存する (as としてNSData) か、単にイメージの名前を保存するのが最善ですか? 私が想像しているのは、リソースの名前を保存する場合ですUITableView。デバイスの各行について、その画像を取得し、処理して最終的に表示する必要があります。それらをスクロールすると(多くのことが起こると予想されます)、フェッチする画像がたくさんあります。それらを に保存するとCore Data、その情報を取得して、画像があるかのように使用するのと同じくらい簡単になります。

イメージを に保存する利点は、Core Datablob を db に保存する通常の撤回に伴います。これが Core Data でどの程度の問題になるかはわかりません (dbs での私の経験は主に MySQL から来ています)

一方、厳しい私の「常識」では、名前だけを保存し、必要に応じて画像を取得する必要があります。さらに要求されると、より多くの時間がかかります。パフォーマンスがどれだけ影響を受けるかはわかりません。なれ。それらを保存する「最良の方法」はありますか?名前だけを呼び出してからpathForResourse:ofType:or (その方が速い場合)pathForResourse:ofType:inDirectory:を呼び出しmainBundle、URI を保存するか、それを指す他の形式を指定します。

edit : アプリケーションには静的コンテンツが同梱されており、ユーザーはこのコンテンツを変更することはできません。(少なくともバージョン 1.0 では)

4

3 に答える 3

5

iOS v5.0の Core Data リリース ノートから:

画像のサムネイルなどの小さなデータ値はデータベースに効率的に格納できますが、大きな写真やその他のメディアはファイル システムで直接処理するのが最適です。管理オブジェクト属性の値を外部レコードとして保存できるように指定できるようになりました。有効にすると、Core Data はデータをデータベースに直接保存するか、管理する別のファイルに URI を保存するかを値ごとにヒューリスティックに決定します。このオプションを使用する場合、バイナリ データ プロパティの内容に基づいてクエリを実行することはできません。

set AllowsExternalBinaryDataStorage: は、基本的に「...画像の名前を保存するだけです...」と説明したことを行います

これらの他の質問も参照してください。

  1. CoreData : 画像を DB に保存するかどうか?
  2. デスクトップから iPhone へのコア データ イメージ
  3. 画像を CoreData に保存することが推奨されない理由の例を教えてください。
于 2012-07-24T17:38:13.173 に答える
1

ファイルの名前を使用するだけで、優れた最適化が得られます...

ファイルを再利用する場合...データベースに2回保存する必要はありません。また、そのファイルを関係として表すためだけにモデルオブジェクトを用意する必要もありません。

プロファイリングとチェックを行うこともできますが、名前だけが理想的だと思います。また、画像をキャッシュする -imageNamed に似たものを作成するために少し作業を行うこともできます。プログラムに存在する場所に関係なく、ファイルごとに 1 つの UIImage を作成するだけで済みます。

于 2012-07-24T17:34:06.793 に答える
1

画像をコア データに保存しないでください。画像に関する情報をコア データに整理して保存できますが、画像はプロジェクトのサポート ファイル セクションに並べておいてください。または、画像をダウンロードする場合は、アプリの画像セクションに画像をキャッシュして、コア データ内の画像の情報を更新するだけです。

于 2012-07-24T17:37:40.360 に答える