我有一个实现NSCoding
协议的模型类。我有一个名为dataModel
的属性,它是此类的一个实例。当我将此实例保存/加载到磁盘时,我应该直接使用dataModel
或ivars的合成访问器吗?为什么?
这是在iOS 5和ARC下,我的属性声明为:
@property (strong, atomic) QardDataModel *dataModel;
为了说明这将是访问者的方式:
-(void)saveData {
[NSKeyedArchiver archiveRootObject:self.dataModel toFile:[self saveFilePath]];
}
-(void)loadData {
self.dataModel = [NSKeyedUnarchiver unarchiveObjectWithFile:[self saveFilePath]];
}
有一种称为saveFilePath
的便捷方法,它返回已归档文件的路径。
答案 0 :(得分:1)
绝对没有区别。
(虽然您可能会觉得访问者更方便,因为您不需要明确的retain
)
答案 1 :(得分:1)
如果要归档/取消归档包含数百万个对象的数据集,那么直接访问变量会带来非常轻微的性能优势。
但是如果你有那么多数据,通常它无论如何都不适合可用的RAM,所以你应该使用SQLite或Core Data。
但是,如果您反复归档和取消归档大量小对象(数十万次),那么您应该使用Instruments来检查objc_msg_send
是否是性能拖累。直接访问变量是解决这个问题的方法。
除此之外,出于各种原因(通常没有一个特别重要),使用访问器方法通常更好。