Objective-C @property和@synthesize最佳实践

时间:2012-01-13 03:20:40

标签: objective-c properties 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 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

这里没有区别:

UILabel * l = [self lbl];  // ==   UILablel *l = self.lbl;
[self setLbl:l];          //  ==   self.lbl = l;

但是你的样本中存在差异:

_lbl.text = @"A";  

最后一个不好,因为您正在绕过@property直接访问iVar,如果您将其声明为@property,通常没有意义。 在您的情况下,您正在更改iVar上的属性,因此没有任何伤害,但如果您这样做:

_lbl = [[[UILabel alloc] initWithFrame:aRect] autorelease];

这会给你带来很大的问题,因为你会绕过“setter”。一个strong setter会保留该对象,但是现在没有人保留它,它会消失,你会有一个坏指针,这会导致你的应用程序崩溃。