2009-05-30 16 views
2

私はオブジェクトのリストを格納する小さなiPhoneアプリを持っています。ユーザーはオブジェクトを追加したり削除したりすることができますが、このリストはかなり小さくなります(ほとんどのユーザーは10-30個のオブジェクトを持ちます)。 NSUserDefaultsの方がはるかに簡単ですが、sqlite3はもっと速くなりますか?わずか30の「レコード」で目立つ違いがありますか?NSUserDefaultsとsqlite3

+0

コアデータが最良の選択肢である:

-(id)initWithCoder:(NSCoder *)coder; -(void)encodeWithCoder:(NSCoder *)coder; 

あなたの方法は次のようになります今iPhone OSのために。 – respectTheCode

答えて

5

NSUserDefaultsは、ユーザー設定、通常はNSStringやNSNumberのような基本オブジェクト用です。プロパティリスト内のオブジェクトのコレクションを直列化するSqlite、またはCore Dataは、作成したモデルオブジェクトなどのユーザーデータを格納するための有効なオプションです。

あなたは速度の違いは見ませんが、やっていることに対して正しいメカニズムを選択するのが最良です。それが単なるプリファレンスであれば、NSUserDefaultsを使用してください。それ以外の場合は、オブジェクトをplistにシリアル化します。もしあなたがCocoaを初めて使っているのであれば、最初にCore Dataとsqliteを避けて、まず基礎を学ぶ機会を与えてください。

+0

私はCocoaを初めて使用しましたが、データベースシステムを使用していません。私が読んだチュートリアルのほとんどは、sqlite文に多くのオーバーヘッドがあるように思えます。標準は、アプリが終了するまで、起動時とキャッシュ変更時のすべてのデータを読み取るようになっているようです。 – respectTheCode

+0

私はsqlite3を使い続けるつもりです。このタイプのデータのより論理的な解決策のようです。 – respectTheCode

2

NSCodingプロトコルで試してください。 NSCodingプロトコルを実装するクラスを宣言します。

@interface Person : NSObject <NSCoding> 

前の行には、次のメソッドを実装することを約束:

-(void)encodeWithCoder:(NSCoder *)coder { 
    [super encodeWithCoder:coder]; 
    [coder encodeObject:firstName forKey:@"firstName"]; 
    [coder encodeObject:lastName forKey:@"lastName"]; 
} 

-(id)initWithCoder:(NSCoder *)coder { 
    [super init]; 
    firstName = [[coder decodeObjectForKey:@"firstName"] retain]; 
    lastName = [[coder decodeObjectForKey:@"lastName"] retain]; 
    return self; 
} 
+1

私は次のプロジェクトのためにこれを調べなければなりません。 – respectTheCode

+2

これは、「オブジェクトをNSUserDefaultsに保存するにはどうすればよいですか」の回答で、さまざまな可能性の利点については説明していません。 –