NSUserDefaults vs sqlite3

时间:2009-05-30 18:08:28

标签: objective-c iphone performance sqlite nsuserdefaults

我有一个小型iPhone应用程序,用于存储对象列表。用户可以添加和删除对象,但此列表将保持相当小(大多数用户将有10-30个对象)。 NSUserDefaults似乎更容易使用,但sqlite3会更快吗?只有30个“记录”会有明显的区别吗?

2 个答案:

答案 0 :(得分:5)

NSUserDefaults用于用户首选项,通常是NSString或NSNumber等基本对象。 Sqlite,序列化属性列表中的对象集合,或核心数据都是存储用户数据的有效选项,例如您创建的模型对象。

你不会看到速度差异,但仍然最好为你正在做的事情选择正确的机制。如果它只是首选项,那么使用NSUserDefaults,否则我会将您的对象序列化为plist。如果你是Cocoa的新手,我会首先避免使用Core Data甚至是sqlite,让自己有机会先学习基础知识。

答案 1 :(得分:2)

尝试使用NSCoding协议。声明你的类实现NSCoding协议:

@interface Person : NSObject <NSCoding>

上一行承诺实现以下方法:

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

您的方法应该类似于:

-(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;
}