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

Другие вопросы по тегам