【问题标题】:NSUserDefaults vs sqlite3NSUserDefaults 与 sqlite3
【发布时间】:2010-10-30 03:17:07
【问题描述】:

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

【问题讨论】:

  • Core Data 现在是 iPhone OS 的最佳选择。

标签: objective-c iphone performance sqlite nsuserdefaults


【解决方案1】:

尝试使用 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;
}

【讨论】:

  • 我将不得不为我的下一个项目研究这个。
  • 这是“如何将对象保存到 NSUserDefaults”的答案,而不是讨论不同可能性的好处。
【解决方案2】:

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

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

【讨论】:

  • 我是 Cocoa 的新手,但不是数据库系统。我读过的大多数教程都让人觉得 sqlite 语句有很多开销。似乎标准是在启动时读取所有数据并缓存更改,直到应用程序终止。
  • 我将继续使用 sqlite3。对于此类数据,这似乎是更合乎逻辑的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-06
  • 2020-06-27
相关资源
最近更新 更多