繁体   English   中英

使用NSKeyedArchiver时,您应该使用访问器还是ivars?

[英]When using NSKeyedArchiver, should you use accessors or ivars?

我有一个实现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的便捷方法,它返回已归档文件的路径。

它完全没有区别。

(尽管您可能会发现访问者更方便,因为您不需要明确retain

如果要归档/取消归档具有数百万个对象的数据集,则直接访问变量会有非常小的性能优势。

但是如果你有那么多数据,通常它无论如何都不适合可用的RAM,所以你应该使用SQLite或Core Data。

但是,如果您反复归档和取消归档大量小对象(数十万次),那么您应该使用Instruments来检查objc_msg_send是否是性能阻力。 直接访问变量是解决这个问题的方法。

除此之外,出于各种原因(通常没有一个特别重要),使用访问器方法通常更好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM