Frage

Was bedeutet "nonatomic" bedeutet in diesem Code?

@property(nonatomic, retain) UITextField *theUsersName;

Was ist der Unterschied zwischen Atom- und nonatomic?

Danke

War es hilfreich?

Lösung

Werfen Sie einen Blick auf die Apple-Docs .

Grundsätzlich, wenn Sie nonatomic sagen, und Sie erzeugen die Accessoren @synthesize verwenden, dann, wenn mehrere Threads versuchen, auf einmal die Eigenschaft zu ändern / lesen kann Schlechtigkeit geschehen. Sie können teilweise geschriebenen Werte erhalten oder über freigegeben / beibehalten Objekte, die zu Abstürzen leicht führen kann. (Dies ist möglicherweise sehr viel schneller als ein Atom-Accessor, though.)

Wenn Sie die Standard verwenden (die atomic ist, es verwendet kein Schlüsselwort für diese sein, aber es

Andere Tipps

so viele Artikel und Beiträge Stackoverflow Nach der Lektüre, und mit gemachten Demo-Anwendungen Variable Eigenschaft Attribute zu überprüfen, entschied ich mich Informationen über all Attribute zusammen zu stellen

  1. Atom // default
  2. nonatomic
  3. strong = retain // default
  4. schwach = unsafe_unretained
  5. beibehalten
  6. zuweisen // default
  7. unsafe_unretained
  8. Kopieren
  9. Read-only
  10. Lese-Schreib-// default

so unten ist der detaillierte Artikel-Link, wo Sie alle Attribute oben erwähnt finden, die Ihnen auf jeden Fall helfen. Vielen Dank an alle Leute, die besten Antworten geben hier !!

  

Variable Eigenschaft Attribute oder Modifikatoren in iOS

  1. Atom
    • Atomic bedeutet, nur ein Thread Zugriff auf die Variable (statischen Typ).
    • Atomic ist Thread-sicher.
    • Aber es ist langsam in der Leistung.
    • Atomic ist das Standardverhalten.
    • Atomic Accessoren in einer nicht Garbage Collection-Umgebung (das heißt bei der Verwendung behalten / Release / Autorelease) wird eine Sperre, um sicherzustellen, dass ein anderer Thread nicht mit der richtigen Einstellung / getting des Wertes nicht stört.
    • es ist nicht wirklich ein Schlüsselwort.

Beispiel:

@property (retain) NSString *name;

@synthesize name;
  1. nonatomic
    • bedeutet nichtatomare mehrere Threadzugriff die Variable (dynamic-Typ).
    • nichtatomare ist Thread unsicher.
    • Aber es ist schnell in der Leistung.
    • nichtatomare NICHT Standardverhalten; wir brauchen nonatomic Stichwort in Eigenschaft Attribut hinzuzufügen.
    • es in einem unerwarteten Verhalten führen kann, wenn zwei verschiedene Verfahren (Fäden) die gleiche Variable gleichzeitig zugreifen.

Beispiel:

@property (nonatomic, retain) NSString *name;

@synthesize name;

Zusätzlich zu dem, was bereits über threadsafeness gesagt, nicht-atomare Eigenschaften sind schneller als Atom-Accessoren. Es ist nicht etwas, das man in der Regel darum kümmern müssen, aber es im Auge zu behalten. Core Data erzeugten Objekte sind nonatomic teilweise aus diesem Grund.

In einem Multi-Threaded-Programm, eine atomare Operation kann nicht teilweise durch unterbrochen werden, während der nicht-atomare Operationen kann.

Sie sollten daher mutexes (oder so ähnlich) verwenden, wenn Sie eine kritische Operation, die nicht-atomare ist, dass Sie nicht unterbrochen wollen.

Wenn Sie „atomare“ angeben, die generierten Zugriffsfunktionen haben einige zusätzlichen Codes gegen gleichzeitiges Updates zu schützen.

Sie können in der Lage einen Griff dieser Materialien zu erhalten, indem die folgenden Artikel zu lesen.

Threading Erklärung mit dem Ziel der nonatomic

nonatomic - nicht Thread-sicher

Atom - Thread-sicher - Dies ist die Standardeigenschaft Attribut.

"atomic“ bedeutet, dass der Zugang zum Objekt ist threadsicher., Während das "nonatomic" ist das Gegenteil davon. Wenn Sie eine Eigenschaft in Objective-C erklären die Eigenschaft von Standardatom ist, so dass synthetisierte Accessoren in einem multithreaded auf Eigentum robusten Zugang bietet umwelt das heißt, wird der Wert aus dem Getter oder eingestellt über die Setter zurück immer vollständig unabhängig abgerufen oder eingestellt gleichzeitig von dem, was die Ausführung anderer Threads. Aber wenn Sie erklären Eigenschaft als nonatomic wie unter

@property (nonatomic, retain)  NSString *myString;

dann bedeutet es, ein synthetisiertes Accessor für eine Objekteigenschaft einfach den Wert direkt zurückgibt. Die Wirkung des nonatomic Attributs hängt von der Umgebung. Standardmäßig sind synthetisiert Accessoren atomar. So nonatomic ist wesentlich schneller als Atom.

Eines ist für Multi-Threads. Eine ist nicht

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top