2012-06-02 13 views
28

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/Reference/Reference.html dice che èFiletto NSUserDefault è sicuro?

... dovrebbe impedire agli utenti di modificare la preferenza disattivando eventuali controlli appropriati.

La classe NSUserDefaults è thread-safe. Persistenza della NSURL e di riferimento di file URL ...

Questa lunga discussione dice che non è

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

Quindi, quale è la scelta giusta? Anche perché la differenza di opinione.

+3

Ricorda che la discussione su cui hai pubblicato un collegamento è del 2006, quindi è del tutto possibile che NSUserDefaults sia diventato sicuro per il thread da allora. – UIAdam

+0

Qualcuno sa di più sulla storia? Forse NSUserDefaults è thread-safe ma non è singleton. Quel genere di cose. –

+0

A meno che tu non abbia ** prove ** recenti per suggerire diversamente, direi che i documenti sono probabilmente corretti nel dire che la classe è infallibile. Che si tratti di un'istanza personalizzata o dell'istanza 'standardUserDefaults' (presumo che sia ciò che intendi per" singleton "), sono tutte in ultima analisi istanze della stessa classe e saranno filettate o meno. – UIAdam

risposta

56

La documentazione Apple iOS 5.1 e OS X 10.7 afferma che è thread-safe; quindi è thread-safe.

+0

In precedenza non è stato salvato? –

+0

e le discussioni? – Tieme

+2

guarda la data della discussione. È terribilmente obsoleto. –

26

Parlando per 10.10 e iOS8 se si sta esaminando l'implementazione, si scoprirà che -[NSUserDefaults setObject:forKey:] sta chiamando __CFPreferencesSetAppValueWithContainer, che alla fine finirà nello +[CFPrefsSource withSourceForIdentifier:user:byHost:container:perform:]. Questo metodo utilizza un pthread_mutex_t per bloccare l'accesso al dizionario contenente i valori.

So NSUserDefaults è sicuro-per-thread.

+1

come vedere comunque l'implementazione? –

+0

Lettura dell'assieme utilizzando Hopper Disassembler (o Xcode) – McZonk