25

私は、NSCoding(NSKeyedArchiver ...)の長所とCoreData(SQLite ....)の使用に対する短所を説明する記事を探していました。

多くのオプションがあります。独自のカスタムバイナリリーダー/ライターを実装するか、plists / xml / json ...を使用するか、SQLiteまたはNSCodingを使用できます。

私は今ちょっと迷っています。主な機能の違いを説明できる人はいますか?

4

4 に答える 4

35

保存するデータの種類と、それを内部でのみ使用するか、外部サービスとデータを交換する必要があるかによって異なります。

NSCodingは、一般的にデータシリアライザーと言えます。多くの組み込みオブジェクトは、バイナリストリーム(ファイル、sqliteのBLOBなど)として保存できるNSCoderプロトコルを実装しています。NSKeyedArchiverを使用すると、文字列ラベルに基づいてそのようなストリームを検索できます。 、辞書に少し似ていますが、キーとして使用できるのは文字列のみです。このアプローチは、異なるクラスのオブジェクトを永続化する必要がある場合に適しています。

ただし、同じクラスのオブジェクトが多数ある場合は、データベースアプローチ、SQLite、またはCoreDataを使用することをお勧めします。CoreDataは、実質的にSQLiteのラッパーであり、データモデルの設計を大幅に容易にし、SQLステートメントを記述しなくても、カーテンの後ろでDBへのクエリを実行します。CoreDataでは、クラスを定義し、クラスの各インスタンスを永続化できます。つまり、オブジェクトのメンバーの値を、常にメモリに保持しなくても取得できます。これは、多くの構造化データを保存するための非常に便利な方法です。たとえば、Webブラウザを作成する場合は、ユーザーのブックマークを名前、URL、および最後にアクセスした時刻とともに保存できます。

XMLとJSONの場合、データをデバイスに対してローカルでのみ使用する場合、特に利点はありません。外部サービスと通信する必要がある場合は、後で使用するためにXML/JSONオブジェクトをキャッシュ/保存することを検討してください。他のアプローチは、必要になるたびに内部データ構造(上記を参照)からこのデータを再生成することです。

データモデルを自分で設計する場合、plistを使用する意味はさらに少なくなりますが、誰かが私を修正してくれるかもしれません。

編集: NSCodingCore Data、そしてボーナスとしてSQLiteの使用方法に関するチュートリアルの短いリンクリファレンスをここに追加します。

更新12.01.2016:永続性ソリューションを探している場合は、レルムもチェックすることをお勧めします。

于 2012-03-05T16:40:59.143 に答える
9

NSCodingMattt Thompsonは、Core DataとNSKeyedArchiverNSHipsterの間のさまざまな違いの消化可能な内訳を提供しています:http: //nshipster.com/nscoding/

于 2014-01-17T21:08:58.520 に答える
3

オブジェクトとリレーショナル構造の間には常にインピーダンスがあります。データアクセスは通常、アプリの機能の一部であるため、私は常にオブジェクトを好みます。NSCodingを使用すると、とにかく書くコードが非常に少なく、シンプルでデバッグが容易になり、制御が可能になります。また、NSCodingをデータベース構造に組み込む柔軟性もあります。

NSCodingは、オブジェクトを保存するための永続化メカニズムです。検索最適化のためにリレーショナル構造にインデックスを追加し、オブジェクト構造を維持すると、非常に低コストで保守が容易になり、すべての世界で最高のものを手に入れることができると思います。

于 2013-08-14T20:19:02.870 に答える
2

すでに優れた回答に加えて、NSCodingとNSKeyedArchiverは、NSUserDefaultsには大きすぎる(または互換性のないデータ型)が、CoreDataには小さすぎて数が少ないデータを格納するための優れた方法です。

于 2017-03-21T20:52:37.183 に答える