Objective-C@属性和@综合最佳实践

Objective-C@属性和@综合最佳实践,objective-c,properties,synthesize,Objective C,Properties,Synthesize,所以我是Objc-C的新手,我刚刚学习了如何使用@property和@synthesis作为变量,我想知道如何访问变量。我应该通过[self-var]或self.var或什么来访问它?这用代码演示了我的问题: @property (nonatomic, strong) UILabel *lbl; ... @synthesize lbl = _lbl; -(void) doStuff { // How should I acces label? _lbl.text = @"A";

所以我是Objc-C的新手,我刚刚学习了如何使用
@property
@synthesis
作为变量,我想知道如何访问变量。我应该通过
[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";  
最后一个是不好的,因为您直接绕过@property访问iVar,如果您将其声明为
@property

在您的情况下,您正在更改iVar上的属性,因此不会有任何伤害,但如果您愿意这样做:

_lbl = [[[UILabel alloc] initWithFrame:aRect] autorelease];
这将给您带来一个大问题,因为您必须绕过“setter”。
strong
setter本来会保留该对象,但现在它不会被任何人保留,它会消失,并且您会有一个错误的指针,这会使您的应用程序崩溃。

可能会重复该对象