Si dice che l'opzione nonatomic
renderà più veloce il tuo metodo di impostazione . Ho cercato su Google ma non sono in grado di capire. Qualcuno potrebbe dirmi perché?Perché si dice che le proprietà siano sempre non anatomiche nell'obiettivo C?
risposta
La dichiarazione di una proprietà atomic
consente al compilatore di generare codice aggiuntivo che impedisce l'accesso simultaneo alla proprietà. Questo codice aggiuntivo blocca un semaforo, quindi ottiene o imposta la proprietà e quindi sblocca il semaforo. Rispetto all'impostazione o al recupero di un valore primitivo o di un puntatore, il blocco e lo sblocco di un semaforo è costoso (sebbene di solito è trascurabile se si considera il flusso generale della propria app).
Poiché la maggior parte delle classi sotto IOS, in particolare quelli legati alla UI, sarà utilizzato in un ambiente a thread singolo, è sicuro per cadere atomic
(cioè scrivere nonatomic
, perché le proprietà sono atomic
di default): anche se l'operazione è relativamente economica, non vuoi pagare per cose che non ti servono.
1+ La parte relativa alla sicurezza di rilasciare atomico per le proprietà dell'interfaccia utente poiché dovrebbe sempre essere aggiornato sul thread principale in ogni caso –
Si potrebbe voler chiarire che al fine di " rilascia "atomic', devi usare esplicitamente' nonatomic' perché 'atomic' è l'impostazione predefinita per le proprietà; se non si specifica nulla, si ottiene 'atomic'. – Caleb
@Caleb Ottimo commento, grazie! – dasblinkenlight
vedere la differenza tra atomico e nonatomic in Objective C
atomica
atomica è il comportamento predefinito per una proprietà; non impostando esplicitamente la proprietà di cui sopra come nonatomico, sarà atomico.
Una proprietà atomica aggiunge un livello di sicurezza del filo durante il recupero o l'impostazione dei valori. Cioè, il getter e il setter per la proprietà saranno sempre completati a prescindere da ciò che altri thread stanno facendo. Il compromesso è che queste proprietà avranno un accesso un po 'più lento di un equivalente nonatomico.
non Atomic
proprietà nonatomic non sono thread-safe, e tornerà direttamente le loro proprietà. Questo sarà più veloce delle proprietà atomiche, ma ovviamente comporta dei rischi se non vengono prese precauzioni.
> 'assicurerà che il processo presente sia completato dalla CPU, prima che un altro processo acceda alla variabile' non implica la sicurezza del thread? – powerj1984
Ho la stessa domanda di @ powerj1984 – Ricardo
@property (strong) NSString *str;
atomica è il comportamento predefinito per una proprietà; non impostando esplicitamente la proprietà di cui sopra come nonatomico, sarà atomico.
setter & getter per queste atomica proprietà
-(NSString *) str{
@synchronized(self){
return str;
}}
-(void) setStr: (NSString *) newString {
@synchronized(self) {
str = newString;
}}
Una proprietà atomica aggiunge un livello di sicurezza thread quando ottenere o impostare i valori. Cioè, il getter e il setter per la proprietà saranno sempre completati a prescindere da ciò che altri thread stanno facendo. queste proprietà avranno un accesso un po 'più lento di un equivalente nonatomico.
@property (strong,nonatomic) NSString *str;
nonatomic proprietà non sono thread sicuro, e si ritorna direttamente le loro proprietà. Questo sarà più veloce delle proprietà atomiche, ma ovviamente comporta dei rischi se non vengono prese precauzioni.
setter & getter per queste nonatomic proprietà
-(NSString *) str{
return str;
}}
-(void) setStr: (NSString *) newString{
str = newString;
}
Così, cercando sui setter & metodi getter sia per atomica & nonatomic che i metodi nonatomic sono molto leggero.
Il tuo codice funzionerà solo con ARC. Poiché ARC garantisce l'atomicità sull'assegnazione di un oggetto, quest'ultimo esempio è in realtà atomico. Nota che le proprietà di 'NSString' dovrebbero sempre essere dichiarate come' copia'. – bbum
- 1. Perché ReSharper mi dice che questa espressione è sempre vera?
- 2. Perché animare le proprietà personalizzate del CALayer fa sì che altre proprietà siano nulle durante l'animazione?
- 3. Perché dotTRACE Memory dice sempre "Connessione"?
- 4. Pensi che le proprietà generiche siano utili in .NET?
- 5. Perché SQLite dice che instr non esiste?
- 6. console Groovy non può "ricordare" tutte le variabili - dice sempre "proprietà sconosciuto"
- 7. Domande e pigrasi anatomiche
- 8. Python: Perché si dice che le variabili a cui si fa riferimento sono solo implicitamente globali?
- 9. perché la copertura di Python dice che mancano le linee?
- 10. Perché le proprietà della raccolta C# non vengono contrassegnate come obsolete quando si richiamano le proprietà su di esse?
- 11. Perché non va bene che le variabili siano globali ma va bene per le funzioni?
- 12. JSHint pensa che le funzioni del gelsomino non siano definite
- 13. L'is_unique di CodeIgniter dice sempre che il valore esiste già
- 14. Perché JavaScript dice che un numero non è un numero?
- 15. Perché si dice "java.sql.SQLException: non valida nome di colonna"
- 16. Perché JSON.stringify non visualizza le proprietà dell'oggetto che sono funzioni?
- 17. Perché il validatore w3 dice che onClick non è valido?
- 18. Perché python dice che non ho "nessun modulo chiamato venv"?
- 19. xcodebuild dice che non contiene schema
- 20. Le proprietà automatiche non funzionano in C#
- 21. Le proprietà di sistema Java sono sempre non nulle?
- 22. Le proprietà hanno sempre un valore quando non impostate?
- 23. Perché Mercurial pensa che i miei file SQL siano binari?
- 24. Perché MongoDB non salva le mie proprietà
- 25. Perché Python dice che pow ha solo 2 argomenti
- 26. Perché JSON.Parse dice "carattere non valido"?
- 27. Perché dichiarare sempre le funzioni in JavaScript?
- 28. Perché il libro dice che devo lanciare malloc?
- 29. Le proprietà C# sono in realtà metodi?
- 30. Perché VS2015RC dice "Il ViewBag non esiste nel contesto attuale", dove VS2013 non dice errori?
http://stackoverflow.com/questions/588866/atomic-vs-nonatomic-properties – Desdenova
http://stackoverflow.com/questions/588866/atomic-vs-nonatomic-properties?rq=1 – peko
Ecco la risposta http://stackoverflow.com/a/32942413/1961064 –