Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top