NSKeyedArchiver线程安全吗?

Toy*_*dor 4 iphone objective-c thread-safety nskeyedarchiver ios

我是否需要担心使用archiveRootObject,并unarchiveObjectWithFile在后台线程?

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    [NSKeyedArchiver archiveRootObject:myArray toFile:file];
});
Run Code Online (Sandbox Code Playgroud)

seb*_*seb 5

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

但是,如果您可以确保在归档后台线程正在进行时对象不会更改其状态,则应该可以安全地执行此操作.