Подтвердить что ты не робот

Является ли поток NSUserDefault безопасным?

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

Итак, какой из них прав? Также почему разница в мнениях.

4b9b3361

Ответ 1

Документация Apple iOS 5.1 и OS X 10.7 говорит о том, что она является потокобезопасной; поэтому он является потокобезопасным.

Ответ 2

Говоря о 10.10 и iOS8, если вы посмотрите на реализацию, вы обнаружите, что -[NSUserDefaults setObject:forKey:] вызывает __CFPreferencesSetAppValueWithContainer, который в конечном итоге окажется в +[CFPrefsSource withSourceForIdentifier:user:byHost:container:perform:]. Этот метод использует pthread_mutex_t для блокировки доступа к словарю, содержащему значения.

Таким образом, NSUserDefaults является потокобезопасным.