2

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

4

2 回答 2

5

NSUserDefaults 用于用户偏好,通常是基本对象,如 NSString 或 NSNumber。Sqlite、序列化属性列表中的对象集合或 Core Data 都是用于存储用户数据(例如您创建的模型对象)的有效选项。

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

于 2009-05-30T18:45:12.333 回答
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;
}
于 2009-05-30T20:54:19.547 回答