NSKeyedArchiver 线程安全吗?

Posted

技术标签:

【中文标题】NSKeyedArchiver 线程安全吗?【英文标题】:NSKeyedArchiver thread safe? 【发布时间】:2015-10-01 14:34:28 【问题描述】:

我是否需要担心在后台线程中使用archiveRootObjectunarchiveObjectWithFile

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) 加密 提高安全性

移动设备上的数据保护

nskeyedarchiver 可以存到数据库吗

c++ string线程安全吗

java priorityblockingqueue 线程安全吗

可以从多个线程等待相同的任务 - 等待线程安全吗?