Objective-C @property и @synthesize лучшие практики
Итак, я новичок в Objc-C, и я только сейчас учусь использовать @property
а также @synthesize
для переменных, и мне было интересно, как мне тогда получить доступ к переменной. Должен ли я получить к нему доступ через [self var]
или же self.var
или что? Это демонстрирует мой вопрос с кодом:
@property (nonatomic, strong) UILabel *lbl;
...
@synthesize lbl = _lbl;
-(void) doStuff
{
// How should I acces label?
_lbl.text = @"A";
[self lbl].text = @"B";
self.lbl.text = @"C";
}
2 ответа
Здесь нет никакой разницы:
UILabel * l = [self lbl]; // == UILablel *l = self.lbl;
[self setLbl:l]; // == self.lbl = l;
Но здесь есть разница в вашем примере:
_lbl.text = @"A";
Последнее не очень хорошо, потому что вы обращаетесь к iVar напрямую, минуя свой @property, что часто не имеет смысла делать, если вы объявили его как @property
,
В вашем случае вы меняете свойство на вашем iVar, так что это не повредит, но если вы сделаете это:
_lbl = [[[UILabel alloc] initWithFrame:aRect] autorelease];
это вызвало бы у вас большие проблемы, потому что вы бы обошли "сеттер". strong
Сеттер должен был сохранить этот объект, но теперь его никто не удержит, он исчезнет, и у вас будет плохой указатель, который может привести к сбою приложения.
Эта ссылка очень помогает обучающимся авторам: http://www.iphonedevsdk.com/forum/iphone-sdk-tutorials/7295-getters-setters-properties-newbie.html