Свойства и переменные экземпляра в Objective-C
Я довольно запутался в свойствах и переменных экземпляра в Objective-C.
Я на полпути к «Программированию какао для Mac OS X» Аарона Хиллегаса, и все логично. Вы бы объявили класс примерно так:
@class Something;
@interface MyClass : NSObject {
NSString *name;
NSArray *items;
Something *something;
IBOutlet NSTextField *myTextField;
}
@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSArray *items;
Поскольку другие объекты должны манипулировать нашимиname
а такжеitems
переменные экземпляра, мы используем@property
/@synthesize
генерировать аксессоры / мутаторы для них. В нашем классе мы не используем аксессоры / мутаторы - мы просто напрямую взаимодействуем с переменной экземпляра.
something
это просто переменная экземпляра, которую мы собираемся использовать в нашем классе, и поскольку никто другой не должен использовать ее, мы не создаем для нее пару методов доступа и мутаторов.
Нам нужно взаимодействовать с текстовым полем в нашем пользовательском интерфейсе, поэтому мы объявляемIBOutlet
для этого, подключите его, и мы сделали.
Все очень логично.
Однако в мире iPhone все выглядит иначе. Люди объявляют свойства для каждой переменной экземпляра, объявляют свойства дляIBOutlets
и использовать аксессоры / мутаторы для взаимодействия с переменными экземплярав класс (например, они написали бы[self setName:@"Test"]
скорее, чемname = @"Test"
).
Почему? Что происходит? Эти различия характерны для iPhone? Каковы преимущества объявления свойств для всех переменных экземпляра, объявления свойств дляIBOutlets
и использование аксессоров / мутаторов в вашем собственном классе?