Est NSUserDefault thread-safe?
...devrait empêcher les utilisateurs de modifier cette préférence en désactivant tout
des contrôles appropriés.La NSUserDefaults classe est thread-safe. La persistance de NSURL et
fichier de référence de l'Url...
Ce long débat qui a dit que ce n'est pas
http://www.cocoabuilder.com/archive/cocoa/155227-nsuserdefaults-thread-safety.html
Donc laquelle est la bonne? Aussi pourquoi la différence d'opinion.
- Gardez à l'esprit que la discussion que vous avez posté un lien vers l'est à partir de 2006, il est donc tout à fait possible que NSUserDefaults est devenu thread-safe depuis.
- Quelqu'un en sait plus sur l'histoire? Peut-être NSUserDefaults est thread-safe, mais il singleton n'est pas. Ce genre de chose.
- Sauf si vous avez récente de preuves pour suggérer le contraire, je suppose que les documents seront probablement raison de dire que la classe est thread-safe. Si c'est une coutume de l'instance ou de la
standardUserDefaults
exemple (je suppose que c'est ce que vous entendez par "singleton"), ils sont tous en fin de compte instances de la même classe doit être thread-safe ou pas. - NSUserDefaults a traversé de nombreuses implémentations au fil des ans. Le fil des garanties de sécurité ont été progressivement mieux avec chacun, il est en assez bonne forme au cours des dernières OS versions.
Vous devez vous connecter pour publier un commentaire.
Apple iOS 5.1 et OS X 10.7 documentation dire qu'il n'est pas thread-safe; par conséquent il n'est pas thread-safe.
Parlant pour la 10.10 et iOS8 si vous à la recherche dans la mise en œuvre, vous trouverez que
-[NSUserDefaults setObject:forKey:]
appelle__CFPreferencesSetAppValueWithContainer
, qui finira par en+[CFPrefsSource withSourceForIdentifier:user:byHost:container:perform:]
. Cette méthode est à l'aide d'unpthread_mutex_t
pour verrouiller l'accès au dictionnaire contenant les valeurs.Donc NSUserDefaults est thread-safe.