Это объявляет переменную экземпляра в вашем объекте:
@interface myclass : UIImageView {
int aVar;
}
Переменные экземпляра являются частными деталями реализации вашего класса.
Если вы хотите, чтобы другие объекты могли прочитать или установить значение переменной экземпляра (ivar), вы можете объявить его как свойство:
@property int aVar;
Это означает, что компилятор ожидает увидеть методы доступа метода set и get для свойства.
Когда вы используете ключевое слово @synthesize, вы просите компилятор автоматически сгенерировать для вас методы доступа для методов set и get.
Итак, в этом случае компилятор сгенерирует код, подобный этому, когда встретит ключевое слово @synthesize:
- (int) aVar
{
return aVar;
}
- (void)setAVar:(int)someInt
{
aVar = someInt;
}
По умолчанию на iPhone (и в 32-разрядной среде выполнения на Mac), @synthesize
требует наличия переменной экземпляра для хранения значения свойства. Этот ivar обычно называется таким же, как свойство, но не обязательно, например, вы можете сделать это:
@interface myclass : UIImageView {
int aVar;
}
@property int someValue;
@synthesize someValue = aVar;
На самом деле @synthesize
и @property
не требуются, вы можете создавать свои собственные методы получения и установки, и до тех пор, пока вы создаете их с использованием синтаксиса, совместимого с Key-Value Coding, свойство все равно будет использоваться.
Требование присутствия ивара, а также объявление @property
связано с ограничением хрупкого базового класса 32-разрядной среды выполнения Objective C как на Mac, так и на iPhone. С 64-битной средой исполнения на Mac вам не нужен ивар, @synthesize
генерирует его для вас.
Обратите внимание, что есть множество ключевых слов, которые вы можете использовать с объявлением @property
для управления типом синтезированного кода доступа, например, readonly
для средства доступа только для получения, copy
, atomic
, nonatomic
и тд. Более подробная информация содержится в документации по Objective-C 2.0 .