Я довольно запутался в свойствах и переменных экземпляра в Objective-C.
Я примерно на полпути через Aaron Hillegass "Cocoa Программирование для 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
для создания для них accessors/mutators. В нашем классе мы не используем accessors/mutators - мы просто напрямую взаимодействуем с переменной экземпляра. -
something
- это просто переменная экземпляра, которую мы собираемся использовать в нашем классе, и поскольку никто другой не должен ее использовать, мы не создаем для нее пару аксессуаров и мутаторов. -
Нам нужно взаимодействовать с текстовым полем в нашем пользовательском интерфейсе, поэтому мы объявляем для него
IBOutlet
, подключаем его, и мы закончили.
Все очень логично.
Однако в мире iPhone все выглядит по-другому. Люди объявляют свойства для каждой отдельной переменной экземпляра, объявляют свойства для IBOutlets
и используют accessors/mutators для взаимодействия с переменными экземпляра внутри класса (например, они пишут [self setName:@"Test"]
, а не name = @"Test"
)).
Почему? Что происходит? Являются ли эти различия конкретными для iPhone? В чем преимущества объявления свойств для всех переменных экземпляра, объявления свойств для IBOutlets
и использования аксессуаров/мутаторов в вашем собственном классе?