2012-07-09 87 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訪問做額外的工作,除了獲取變量。