Objective-C @property и @synthesize наилучшая практика
-
27-10-2019 - |
Вопрос
Итак, я новичок в 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";
}
Решение
Здесь нет никакой разницы :
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];
это вызвало бы у вас большую проблему, потому что вам пришлось бы обойти "сеттер".A strong
установщик сохранил бы этот объект, но теперь его никто не сохраняет, он исчезнет, и у вас будет неверный указатель, который может привести к сбою вашего приложения.
Другие советы
Эта ссылка очень помогает для обучения аксессов: http://www.iphonedevsdk.com/forum/iphone-sdk-tutorials/7295-getters-setters-properties-newbie.html