Przed omówieniem o atrybutach @property, należy wiedzieć, jaki jest pożytek z @property. @property oferuje możliwość definiowania informacji, że klasa jest przeznaczona do hermetyzacji. Jeśli zadeklarować obiekt / zmienna użyciu @property, to obiekt / zmienna będzie dostępna dla innych klas importujących swojej klasie. Jeśli zadeklarujesz obiektu przy @property w pliku nagłówka, a następnie trzeba go syntetyzować stosując @synthesize w pliku implementacji.
Przykład:
.h klasa
@interface ExampleClass : NSObject
@property (nonatomic, retain) NSString *name;
@end
.m klasa
@implementation ExampleClass
@synthesize name;
@end
Teraz kompilator syntezy accessor metody nazwie.
ExampleClass *newObject=[[ExampleClass alloc]init];
NSString *name1=[newObject name]; // get 'name'
[obj setName:@“Tiger”];
Lista atrybutów @property: atomowy. nonatomic. zachować. Kopiuj. tylko czytać. readwrite. przydzielać. silny.
atomowa: Jest to zachowanie domyślne. Jeśli obiekt jest zadeklarowana jako atomowy wówczas staje się bezpieczny wątku. Wątku bezpieczny środek, w czasie tylko jeden wątek konkretnej instancji tej klasy może mieć kontrolę nad tym obiektem.
Przykład:
@property NSString *name; //by default atomic
@property (atomic)NSString *name; // explicitly declared atomic
nonatomic: To nie jest bezpieczny wątku. Można użyć atrybutu właściwość nonatomic aby określić, że syntetyzowane akcesorów prostu ustawić lub zwrócić wartość bezpośrednio, bez żadnych gwarancji, co się dzieje, jeśli ta sama wartość jest dostępna jednocześnie z różnych wątków. Z tego powodu, to szybciej uzyskać dostęp do właściwości nonatomic niż jednego atomu.
@property (nonatomic)NSString *name;
zachowują: Nie jest wymagane, gdy atrybut jest wskaźnik do metody setter object.The wzrośnie zachować rachubę obiektu, tak, że będzie zajmować pamięć autorelease basenie.
@property (retain)NSString *name;
kopia: Jeśli korzystasz z kopii, nie można używać zachowują. Korzystanie instancji kopia klasy będzie zawierać własną kopię. Nawet jeśli zmienny łańcuch jest ustawiony, a następnie zmienione wystąpienie rejestruje cokolwiek wartość ma w tym czasie jest on ustawiony. będzie syntetyzowany setter i getter żadne metody.
@property (copy) NSString *name;
NSMutableString *nameString = [NSMutableString stringWithString:@"Liza"];
xyzObj.name = nameString;
[nameString appendString:@"Pizza"];
tylko do odczytu: Jeśli nie chcesz, aby właściwość zostać zmienione poprzez metody setter, można zadeklarować właściwość tylko do odczytu.
@property (readonly) NSString *name;
readwrite: to zachowanie domyślne. Nie trzeba określić atrybut ReadWrite wyraźnie.
@property (readwrite) NSString *name;
przypisać: wygeneruje setter która przypisuje wartość do zmiennej instancji bezpośrednio, zamiast kopiowania lub utrzymania go. To jest najlepsze dla prymitywnych typów jak NSInteger i CGFloat lub obiektów, które bezpośrednio nie są właścicielami, takich jak delegatów.
@property (assign) NSInteger year;
mocne: jest zamiennikiem zachować.
@property (nonatomic, strong) AVPlayer *player;
unsafe_unretained: Istnieje kilka klas w Cocoa i Cocoa Touch, które nie obsługują jeszcze słabe odwołania, co oznacza, że nie może zadeklarować słabe właściwości lub słaby zmiennej lokalnej śledzić nich. Zajęcia te obejmują NSTextView, NSFont i NSColorSpace itp. Jeśli trzeba użyć słabego odniesienia do jednej z tych klas, trzeba użyć niebezpiecznego odniesienia. Niebezpiecznym referencyjna jest podobny do słabego odniesienia w to, że nie trzymać jej powiązany obiekt żywy, ale to nie będzie ustawiona na zero jeśli obiekt docelowy jest zwalniane.
@property (unsafe_unretained) NSObject *unsafeProperty;