0

所以我是 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";
}
4

1 回答 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”。一个strongsetter 会保留该对象,但现在没有人保留它,它会消失并且您将拥有一个错误的指针,这可能会使您的应用程序崩溃。

于 2012-01-13T03:33:56.280 回答