[ios] Cosa significa la proprietà "non anatomica"?


Answers

Dopo aver letto tanti articoli e i post StackOverflow e aver fatto app demo per controllare gli attributi delle proprietà Variable, ho deciso di mettere insieme tutte le informazioni sugli attributi

  1. atomico // predefinito
  2. nonatomic
  3. strong = retain // default
  4. weak = unsafe_unretained
  5. conservare
  6. assegna // default
  7. unsafe_unretained
  8. copia
  9. sola lettura
  10. readwrite // default

così di seguito è il link articolo dettagliato in cui è possibile trovare sopra tutti gli attributi di cui sopra, che sicuramente ti aiuteranno. Mille grazie a tutte le persone che danno le migliori risposte qui !!

Attributi di proprietà variabili o modificatori in iOS

  1. atomico
    • Atomico significa che solo un thread accede alla variabile (tipo statico).
    • Atomic è thread sicuro.
    • Ma è lento nelle prestazioni.
    • Atomic è un comportamento predefinito.
    • Gli accessor atomici in un ambiente privo di garbage collection (cioè quando si utilizza retain / release / autorelease) utilizzeranno un lock per assicurarsi che un altro thread non interferisca con l'impostazione / acquisizione corretta del valore.
    • in realtà non è una parola chiave.

Esempio :

@property (retain) NSString *name;

@synthesize name;
  1. nonatomic
    • Nonatomico significa accesso multiplo alla variabile (tipo dinamico).
    • Nonatomico non è sicuro.
    • Ma è veloce nelle prestazioni.
    • Nonatomico NON è un comportamento predefinito; dobbiamo aggiungere parole chiave non anatomiche nell'attributo della proprietà.
    • può comportare un comportamento imprevisto quando due diversi processi (thread) accedono alla stessa variabile nello stesso momento.

Esempio:

@property (nonatomic, retain) NSString *name;

@synthesize name;
Question

Cosa significa "nonatomico" in questo codice?

@property(nonatomic, retain) UITextField *theUsersName;

Qual è la differenza tra atomico e nonatomico?

Grazie




In un programma multi-thread, un'operazione atomica non può essere interrotta parzialmente attraverso, mentre le operazioni non anatomiche possono.

Pertanto, dovresti usare mutex (o qualcosa di simile) se hai un'operazione critica non anatomica che non vuoi interrotta.




"Atomico" significa che l'accesso alla proprietà è thread-safe, mentre il "nonatomico" è l'opposto di esso. Quando si dichiara una proprietà in Objective-C, la proprietà è atomica per impostazione predefinita in modo che gli accessori sintetizzati forniscano un accesso sicuro alla proprietà in un ambiente con multithreading, ovvero il valore restituito dal getter o impostato tramite il setter viene sempre recuperato o impostato indipendentemente da ciò che altri thread vengono eseguiti contemporaneamente, ma se si dichiara la proprietà come non anatomica come di seguito

@property (nonatomic, retain)  NSString *myString;

quindi significa che un accessore sintetizzato per una proprietà dell'oggetto restituisce semplicemente il valore direttamente. L'effetto dell'attributo nonatomico dipende dall'ambiente. Per impostazione predefinita, gli accessori sintetizzati sono atomici. Quindi il nonatomico è considerevolmente più veloce dell'atomico.




Solitamente atomico significa che le scritture / letture sulla proprietà avvengono come una singola operazione. Atomic_operation






Links