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 dlaIBOutletsi 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 dlaIBOutletsi używając akcesoriów / mutatorów w swojej klasie?

questionAnswers(5)

yourAnswerToTheQuestion