NSUserDefault线程安全吗?

时间:2012-06-02 17:33:15

标签: objective-c arrays thread-safety

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/Reference/Reference.html说它是

  

...应禁止用户通过禁用任何内容来编辑该首选项   适当的控制。

     

NSUserDefaults类是线程安全的。 NSURL的持久性和   文件参考网址......

这个长时间的讨论说它不是

http://www.cocoabuilder.com/archive/cocoa/155227-nsuserdefaults-thread-safety.html

那么哪一个是对的?也是为什么意见分歧。

2 个答案:

答案 0 :(得分:63)

Apple iOS 5.1和OS X 10.7文档说它是线程安全的;因此它是线程安全的。

答案 1 :(得分:38)

对于10.10和iOS8,如果您查看实施内容,您会发现-[NSUserDefaults setObject:forKey:]正在调用__CFPreferencesSetAppValueWithContainer,最终会以+[CFPrefsSource withSourceForIdentifier:user:byHost:container:perform:]结尾。此方法使用pthread_mutex_t来锁定对包含值的字典的访问。

所以NSUserDefaults是线程安全的。