Objective-C @property и @synthesize лучшие практики - PullRequest
0 голосов
/ 13 января 2012

Итак, я новичок в 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 ]

0 голосов
/ 13 января 2012

Здесь нет никакой разницы:

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 должен был бы сохранить этот объект, но теперь его никто не удержит, он исчезнет, ​​и у вас будет плохой указатель, который может привести к сбою приложения.

0 голосов
/ 13 января 2012

Эта ссылка очень помогает для изучения аксессоров: http://www.iphonedevsdk.com/forum/iphone-sdk-tutorials/7295-getters-setters-properties-newbie.html

...