所以我是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";
}
答案 0 :(得分:0)
此链接对学习访问器有很大帮助:http://www.iphonedevsdk.com/forum/iphone-sdk-tutorials/7295-getters-setters-properties-newbie.html
答案 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会保留该对象,但是现在没有人保留它,它会消失,你会有一个坏指针,这会导致你的应用程序崩溃。