2015-07-13 71 views
2

我是否需要擔心在後臺線程中使用archiveRootObjectunarchiveObjectWithFileNSKeyedArchiver線程安全嗎?

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

回答

4

你應該非常小心這一點。 archiveRootObject不是原子操作。例如,如果在後臺線程上調用archiveRootObject,而另一個線程更改要歸檔的對象的狀態,則最終可能會歸檔該對象的非法狀態。當然這很大程度上取決於你的應用程序以及你如何爲你的對象實現歸檔/非歸檔例程。

但是,如果您可以確保該對象在歸檔後臺線程正在進行時不改變其狀態,則應該安全。

1

作爲一個同步調用,所以如果你要保存大量數據並且不想阻塞UI,那麼你應該考慮後臺線程。

否則,如果您的要求是顯示一些狀態/檢查/操作完成,那麼你不需要一個線程。

最後這一切都取決於您的應用程序的要求。

時請在link