Właściwości i zmienne instancji w Objective-C
Jestem raczej zdezorientowany co do właściwości i zmiennych instancji w Objective-C.
Jestem w połowie drogi do „Cocoa Programming dla Mac OS X” Aarona Hillegassa i wszystko jest logiczne. Zadeklarowałbyś klasę podobną do tej:
@class Something;
@interface MyClass : NSObject {
NSString *name;
NSArray *items;
Something *something;
IBOutlet NSTextField *myTextField;
}
@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSArray *items;
Ponieważ inne obiekty muszą manipulować naszyminame
iitems
zmienne instancji, używamy@property
/@synthesize
wygenerować dla nich akcesoria / mutatory. W naszej klasie nie używamy akcesoriów / mutatorów - po prostu wchodzimy w interakcję ze zmienną instancji bezpośrednio.
something
jest po prostu zmienną instancji, której będziemy używać w naszej klasie, a ponieważ nikt inny nie musi jej używać, nie tworzymy dla niej pary akcesorów i mutatorów.
Musimy współdziałać z polem tekstowym w naszym interfejsie użytkownika, więc deklarujemyIBOutlet
do tego podłącz go i skończymy.
Wszystko bardzo logiczne.
Jednak w świecie iPhone'a sprawy wyglądają inaczej. Ludzie deklarują właściwości każdej zmiennej instancji, deklarują właściwości dlaIBOutlets
i używaj akcesorów / mutatorów do interakcji ze zmiennymi instancjiw ciągu klasa (np. napisaliby[self setName:@"Test"]
zamiastname = @"Test"
).
Czemu? Co się dzieje? Czy te różnice są specyficzne dla iPhone'a? Jakie są zalety deklarowania właściwości dla wszystkich zmiennych instancji, deklarowanie właściwości dlaIBOutlets
i używając akcesoriów / mutatorów w swojej klasie?