Was bedeutet die Eigenschaft „nichtatomare“?
-
03-07-2019 - |
Frage
Was bedeutet "nonatomic" bedeutet in diesem Code?
@property(nonatomic, retain) UITextField *theUsersName;
Was ist der Unterschied zwischen Atom- und nonatomic?
Danke
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
- Atom // default
- nonatomic
- strong = retain // default
- schwach = unsafe_unretained
- beibehalten
- zuweisen // default
- unsafe_unretained
- Kopieren
- Read-only
- 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 !!
- 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;
- 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.
In der Regel bedeutet, dass Atom schreibt / liest die Eigenschaft als eine einzelne Operation geschehen. Atomic_operation
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