アンキット、
これがtl;drスキニーです:コアデータを使用してください。
長い形式は次のとおりです。
Core Data、ORM (FMDB)、または直接の sqlite 呼び出しのいずれかを選択するために多くの基準を使用できますが、この選択の実際のコストは、それを使用する時間、Apple のサポート、および他のプロジェクトからの活用から生じます。(REST サービスを Core Data にマップする RESTKit は最近人気があります。)
したがって、大部分の時間、たとえば 90% 以上 (架空の統計) では、iOS での答えは Core Data を使用することになります。なんで?コツをつかんで、いくつかの小さなヘルパー メソッドを作成すると、Core Data によって、一貫したコンピューティングの世界、つまり Objective-C オブジェクト グラフにとどまることができます。Core Data は、iOS プログラミングの他のすべての側面に役立つ動的言語の使用方法について説明します。したがって、生産性が向上します。フレームワークと戦わないでください。
大規模で複雑な SQLite データベースとスキーマを別のアプリから引き継いでいる場合は、FMDB または SQLite を使用する方が費用対効果が高い場合があります。しかし、私はそれを疑います。DB を Core Data DB に移行するための単純な Mac ベースのコマンド ライン アプリを作成する時間は、限られた単純なタスクです。Objective-C では、ほとんどのビジネス ロジックを書き直さなければならないことがほぼ保証されています。(はい、C++ と Objective-C++ はどちらも優れたテクノロジです。データベースのビジネス ロジックは、メモリが制限されたデバイスで動作するように本当に調整されていますか? 私はそうは思いませんでした。)
Core Data は、パフォーマンスでお尻を叩かれます。それは本当にかなり速いです。DB を使用する場合とは異なる方法で使用する必要があります。特に、ほとんどの場合、ストアからデータをオーバーフェッチしてから、さまざまなセットや配列に対して述語を直接使用してデータを調整します。フラッシュが驚くほど遅い iOS デバイスでは、このオーバーフェッチ戦略は特に効果的です。これらのデバイスには実際に大量の RAM が搭載されているため、これを使用してパフォーマンスを向上させます。(はい、これは上記の移植性の高いビジネス ロジックに対するノックアウトとは明らかな矛盾であることは承知しています。しかし、実際には、デスクトップまたはサーバー環境から移植されたコードには、ディスクの速度、メモリの量、およびメモリの実際の状況について、非常に多くの暗黙の前提が含まれています。バッキング ストアを備えた VM では、ファンキーなメモリ モデルを備えたバッテリ駆動のメモリ制限のあるデバイスではうまく動作しません。また、データを非正規化して、さまざまな iOS および Mac OS X UI ウィジェットでの表示を簡素化します。Core Data が同等の SQLite DB よりも遅くなるアプリケーションがいくつかあります。それらは他の場所で詳しく説明されています。主要な主張の 1 つは、上流のデータベースによって ID が定義されているタスクが Core Data のパフォーマンスにヒットするということです。ただし、賢明なインデックス作成とオーバーフェッチによって、ある程度軽減することができます。
モバイル デバイスについても覚えておくべきことは、これらはインターネットのリーフ上にあるモバイル デバイスであるため、データベースのサイズは通常適度なサイズであるということです。したがって、パフォーマンスを達成しやすくなります。サーバーの世界から学んだ多くの教訓は、モバイルのバッテリー駆動の世界には当てはまらないかもしれません。
言い換えれば、iOS/Mac OS X で Objective-C を使用するためには、「オールイン」する必要がありました。Core Data を使用することで、重要な生産性の利点も得ることができます。
アンドリュー