Ключевое слово @ synthezise
указывает компилятору Objective-C на создание метода get и метода set для вашего свойства. Если вы определили:
@property(copy,nonatomic) NSString* name;
Тогда @synthesize name;
создаст для вас эти два метода, чтобы вам не приходилось их реализовывать:
-(NSString*)name;
{
return name;
}
-(void)setName:(NSString*)newName;
{
if (name != newName) {
[name release];
name = [newValue copy];
}
}
По умолчанию имя переменной экземпляра, которая используется в качестве резервного хранилища для синтезированного свойства, называется таким же, как и свойство. Это не всегда то, что вы хотите, и вы можете затем синтезировать как @synthesize name = _otherName;
, чтобы сказать компилятору вместо этого сгенерировать этот код для вас:
-(NSString*)name;
{
return _otherName;
}
-(void)setName:(NSString*)newName;
{
if (_otherName != newName) {
[_otherName release];
_otherName = [newValue copy];
}
}
Причина, по которой вы обычно добавляете префиксы переменных экземпляра, которые используются в качестве резервных хранилищ для свойств с символом подчеркивания '_', заключается в том, что вы помните, что не должны обращаться к ним напрямую.