NSUserDefault线程安全吗?

use*_*951 34 arrays objective-c thread-safety

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

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

NSUserDefaults的类是线程安全的.NSURL和文件引用URL的持久性......

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

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

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

GoZ*_*ner 65

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

  • 看看讨论的日期.它非常过时了. (2认同)

McZ*_*onk 42

说到10.10和iOS8,如果你研究实现,你会发现它-[NSUserDefaults setObject:forKey:]正在调用__CFPreferencesSetAppValueWithContainer,最终会进入调用状态+[CFPrefsSource withSourceForIdentifier:user:byHost:container:perform:].此方法使用a pthread_mutex_t来锁定对包含值的字典的访问.

所以NSUserDefaults是线程安全的.

  • 使用Hopper Disassembler(或Xcode)读取程序集 (3认同)
  • 无论如何看怎么看? (2认同)