NSKeyedArchiver 线程安全吗?
NSKeyedArchiver thread safe?
我需要担心在后台线程中使用 archiveRootObject
和 unarchiveObjectWithFile
吗?
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[NSKeyedArchiver archiveRootObject:myArray toFile:file];
});
由于它是一个同步调用,所以如果您正在保存大量数据并且不想阻塞 UI 那么您应该考虑后台线程。
否则,如果您的要求是在完成时显示某些状态/检查/操作,那么您不需要线程。
最后这一切都取决于您的应用程序要求。
在 link
查看更多
你应该非常小心。 archiveRootObject
不是原子操作。例如,如果您在后台线程上调用 archiveRootObject
,而另一个线程更改了正在归档的对象的状态,您最终可能会归档该对象的非法状态。当然,这在很大程度上取决于您的应用程序以及您如何为对象实现 archive/unarchive 例程。
但是,如果您可以确保在归档后台线程正在进行时对象不会更改其状态,那么这样做应该是安全的。
我需要担心在后台线程中使用 archiveRootObject
和 unarchiveObjectWithFile
吗?
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[NSKeyedArchiver archiveRootObject:myArray toFile:file];
});
由于它是一个同步调用,所以如果您正在保存大量数据并且不想阻塞 UI 那么您应该考虑后台线程。
否则,如果您的要求是在完成时显示某些状态/检查/操作,那么您不需要线程。
最后这一切都取决于您的应用程序要求。
在 link
查看更多你应该非常小心。 archiveRootObject
不是原子操作。例如,如果您在后台线程上调用 archiveRootObject
,而另一个线程更改了正在归档的对象的状态,您最终可能会归档该对象的非法状态。当然,这在很大程度上取决于您的应用程序以及您如何为对象实现 archive/unarchive 例程。
但是,如果您可以确保在归档后台线程正在进行时对象不会更改其状态,那么这样做应该是安全的。