2009-05-30 61 views
2

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

+0

核心数据是最好的选择现在用于iPhone OS。 – respectTheCode 2010-04-26 20:20:12

回答

5

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

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

+0

我是新来的可可,但不是数据库系统。我读过的大部分教程都表明,在sqlite语句中有很多开销。标准似乎是在启动和缓存更改时读取所有数据,直到应用程序终止。 – respectTheCode 2009-05-30 19:12:47

+0

我只是要继续使用sqlite3。这似乎是这种类型的数据更合乎逻辑的解决方案。 – respectTheCode 2009-05-31 20:02:51

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