El Standard es atomic
Das bedeutet, dass Sie bei jeder Verwendung der Eigenschaft Leistung verlieren, aber es ist thread-sicher. In Objective-C wird eine Sperre gesetzt, sodass nur der aktuelle Thread auf die Variable zugreifen kann, solange der Setter/Getter ausgeführt wird.
Beispiel mit MRC für eine Eigenschaft mit einem Ivar _internal:
[_internal lock]; //lock
id result = [[value retain] autorelease];
[_internal unlock];
return result;
Die letzten beiden sind also identisch:
@property(atomic, retain) UITextField *userName;
@property(retain) UITextField *userName; // defaults to atomic
Andererseits gilt nonatomic
nichts zu Ihrem Code hinzufügen. Es ist also nur dann thread-sicher, wenn Sie den Sicherheitsmechanismus selbst codieren.
@property(nonatomic, retain) UITextField *userName;
Die Schlüsselwörter müssen nicht unbedingt als erstes Eigenschaftsattribut angegeben werden.
Vergessen Sie nicht, dass dies nicht bedeutet, dass die Eigenschaft als Ganzes thread-sicher ist. Nur der Methodenaufruf des Setters/Getters ist sicher. Aber wenn Sie einen Setter und danach einen Getter zur gleichen Zeit mit 2 verschiedenen Threads verwenden, könnte auch das kaputt sein!
4 Stimmen
developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/