需要对财产进行一些解释

时间:2012-07-09 13:35:15

标签: iphone objective-c ios properties

  

可能重复:
  How does an underscore in front of a variable in a cocoa objective-c class work?

我是ios应用程序开发的初学者。我看了很多教程,我遇到了以下行

.h文件包含:

@property (strong) ScaryBugData *data;

.m包含:

@synthesize data = _data; 

但我没有得到data = _data的意思。 为什么这是必需的或它意味着什么。

参考:http://www.raywenderlich.com/1797/how-to-create-a-simple-iphone-app-tutorial-part-1

2 个答案:

答案 0 :(得分:2)

_data是为您自动创建的实例变量的名称 data是具有getter和setter的属性的名称。

如果您没有指定自定义的ivar名称,它将默认为属性的名称。

在这种情况下,您可以使用_data = [ScaryBugData data]直接设置ivar,也可以使用self.data = [ScaryBugData data]设置setter。获得也是如此。

合成的setter将确保正确释放旧值,正确保留新值以及更多内容。

答案 1 :(得分:1)

如果访问self.data,则调用getter / setter方法。如果指定_data,则绕过setter方法并直接访问变量。这可能是有用的,例如,如果你的setter或getter正在做你在这种特殊情况下可能不想要的其他事情。

在Java世界中,这相当于调用this.thing = xyz vs. setThing(xyz)

例如,查看Core Data模板,您可以看到managedObjectContext访问器如何进行额外的工作,而不仅仅是获取变量。