2012-07-09 91 views
0

可能重复:
How does an underscore in front of a variable in a cocoa objective-c class work?需要一些解释对财产

我在iOS应用development.I初学者看着很多教程,我碰到下面的行

。 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

这里还有另外16:http://stackoverflow.com/q/5582448/ http://stackoverflow.com/q/6049269/ http://stackoverflow.com/q/2371489/ HTTP:/ /stackoverflow.com/q/7174277/ http://stackoverflow.com/q/5659156 http://stackoverflow.com/q/837559/ http://stackoverflow.com/q/6146244/ http: //stackoverflow.com/q/10651535/ http://stackoverflow.com/q/6124109/ http://stackoverflow.com/q/8145373/ http://stackoverflow.com/q/3521254/ http://stackoverflow.com/q/6064283/ http://stackoverflow.com/q/9696359/ http://stackoverflow.com/q/5521499/ http://stackoverflow.com/q/5466496/ http://stackoverflow.com/q/2114587/ – 2012-07-09 18:13:25

回答

2

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

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

在这种情况下,您可以使用_data = [ScaryBugData data]直接设置伊娃,或者您可以使用设置器self.data = [ScaryBugData data]。获取同样如此。

合成的setter将确保旧值正确释放,新值被正确保留,并在罩下放置更多东西。

1

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

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

看看例如核心数据模板,你可以看到例如managedObjectContext访问做额外的工作,除了获取变量。