20

これはすでにカバーされていると思いましたが、私の検索では関連性のあるものは何も返されませんでした。

NSUserDefaults、コア データ、オブジェクト アーカイブ、生の SQLite、plists、そしてもちろん、Web サーバーによるストレージがあることは承知しています。初心者にとって不明確でやや漠然としているのは、これらのさまざまなツールをいつ使用するかです。

Web サーバーと Core Data の使用法は明らかですが、NSUserDefaults と plist はどうでしょうか? コア データ vs オブジェクト アーカイブ? ユースケースの簡単な内訳は、iOS のストレージに非常に多くのオプションがある理由を理解するのに本当に役立ちます。

4

1 に答える 1

25

@rmaddyが言うように、この回答は本の章を埋める可能性があるため、一般的なユースケースの簡単で簡単なリストを作成しようとしました:

  • NSUserDefaults: シンプルなユーザー設定を保存します。複雑すぎたり、安全ではありません。アプリにいくつかのスイッチがある設定ページがある場合は、ここにデータを保存できます。

  • Keychain(優れたラッパーについてはSSKeychainを参照してください): 資格情報などの機密データを格納するために使用されます。

  • PLists: より大きな構造化データを格納するために使用されます (ただし、巨大ではありません): 非常に柔軟な形式であり、多数のシナリオで使用できます。いくつかの例は次のとおりです。

    • ユーザー生成コンテンツ ストレージ: マップまたはリストで表示されるジオポイントの単純なリスト。
    • アプリに単純な初期データを提供します。この場合、plist は、ユーザーによって生成されてユーザー データによって埋められるのではなく、NSBundle に含まれます。
    • アプリケーションの特定のモジュールに必要なデータを他のデータから分離します。たとえば、ステップバイステップのスタートアップ チュートリアルを作成するために必要なデータです。各ステップは他のステップと似ていますが、必要なデータが異なるだけです。このデータをハードコーディングすると、コードが簡単にいっぱいになってしまうので、より優れた開発者になり、代わりに plist を使用してデータを保存し、そこから読み取ることができます。
    • それを使用する開発者が何らかの方法で構成できるライブラリまたはフレームワークを作成しています。
  • Object archivingplist のような単純な構造にマップできない (またはマップしたくない) バイナリ データでいっぱいの、より複雑なオブジェクトをシリアル化するのに役立ちます。

  • Core Dataは強力で、さまざまな永続ストアでサポートでき (SQLite はその 1 つにすぎませんが、XML ファイルを選択したり、独自の形式を記述したりすることもできます!)、要素間の関係を提供します。これは複雑で、KVO やコンテキストなど、開発に役立つ多くの機能を提供します。ユーザーが生成したり、サーバーによって提供されたりする可能性のある、多くの相関レコードの大きなデータセットに使用する必要があります。

  • Raw SQLiteリレーショナル データ ソースへの非常に高速なアクセスが必要な場合 (Core Data によってオーバーヘッドが発生する)、または複数のプラットフォームで同じ SQLite 形式をサポートする必要がある場合 (SQLite 内の CoreData をいじってはいけません。独自のものを使用します)。そのため、既存の SQLite を CoreData に「インポート」することはできません)。たとえば、私が働いていたプロジェクトでは、Web サービスが json や xml の代わりにいくつかの大きな SQLite を提供してくれました。他の SQLite は、非常に高速なアクセスのために直接読み取られました。

  • Webserver storage明らかなはずです。データをサーバーに保存する必要があるのは、デバイスがそのデータの唯一の所有者であってはならないからです。しかし、同じアプリを異なる iOS デバイス間で同期する必要がある場合 (または Mac に移植されたバージョンのアプリと同期する必要がある場合) は、明らかに iCloud ストレージを検討することもできます。

于 2013-05-06T23:41:10.763 に答える