NSKeyedArchiver 线程安全吗?
Posted
技术标签:
【中文标题】NSKeyedArchiver 线程安全吗?【英文标题】:NSKeyedArchiver thread safe? 【发布时间】:2015-10-01 14:34:28 【问题描述】:我是否需要担心在后台线程中使用archiveRootObject
和unarchiveObjectWithFile
?
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^
[NSKeyedArchiver archiveRootObject:myArray toFile:file];
);
【问题讨论】:
【参考方案1】:你应该非常小心。 archiveRootObject
不是原子操作。例如,如果您在后台线程上调用archiveRootObject
,而另一个线程更改正在归档的对象的状态,您最终可能会归档该对象的非法状态。当然,这在很大程度上取决于您的应用程序以及您如何为对象实现归档/取消归档例程。
但是,如果您可以确保对象在归档后台线程正在进行时不会更改其状态,那么这样做应该是安全的。
【讨论】:
【参考方案2】:由于它是一个同步调用,所以如果您正在保存大量数据并且不想阻塞 UI,那么您应该考虑使用后台线程。
否则,如果您的要求是在完成时显示一些状态/检查/操作,那么您不需要线程。
最后,这一切都取决于您的应用需求。
在link查看更多信息
【讨论】:
以上是关于NSKeyedArchiver 线程安全吗?的主要内容,如果未能解决你的问题,请参考以下文章
iOS 数据的归档(NSKeyedArchiver )与数据的解档(NSKeyedUnarchiver) 加密 提高安全性