Ответ 1
Документация Apple iOS 5.1 и OS X 10.7 говорит о том, что она является потокобезопасной; поэтому он является потокобезопасным.
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
Итак, какой из них прав? Также почему разница в мнениях.
Документация Apple iOS 5.1 и OS X 10.7 говорит о том, что она является потокобезопасной; поэтому он является потокобезопасным.
Говоря о 10.10 и iOS8, если вы посмотрите на реализацию, вы обнаружите, что -[NSUserDefaults setObject:forKey:]
вызывает __CFPreferencesSetAppValueWithContainer
, который в конечном итоге окажется в +[CFPrefsSource withSourceForIdentifier:user:byHost:container:perform:]
. Этот метод использует pthread_mutex_t
для блокировки доступа к словарю, содержащему значения.
Таким образом, NSUserDefaults является потокобезопасным.