可能重复:
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
答案 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访问器如何进行额外的工作,而不仅仅是获取变量。