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