NSKeyedArchiver 线程安全吗?

NSKeyedArchiver thread safe?

我需要担心在后台线程中使用 archiveRootObjectunarchiveObjectWithFile 吗?

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    [NSKeyedArchiver archiveRootObject:myArray toFile:file];
});

由于它是一个同步调用,所以如果您正在保存大量数据并且不想阻塞 UI 那么您应该考虑后台线程。

否则,如果您的要求是在完成时显示某些状态/检查/操作,那么您不需要线程。

最后这一切都取决于您的应用程序要求。

link

查看更多

你应该非常小心。 archiveRootObject 不是原子操作。例如,如果您在后台线程上调用 archiveRootObject,而另一个线程更改了正在归档的对象的状态,您最终可能会归档该对象的非法状态。当然,这在很大程度上取决于您的应用程序以及您如何为对象实现 archive/unarchive 例程。

但是,如果您可以确保在归档后台线程正在进行时对象不会更改其状态,那么这样做应该是安全的。