2012-06-21 66 views
0

可能重複:
How does an underscore in front of a variable in a cocoa objective-c class work?
Prefixing property names with an underscore in Objective C目的下合成的屬性的ivar

當我們聲明一個屬性,然後合成它像這樣,例如: @synthesize名稱= _name; 因此,_name是我們將在以下實現中使用的名稱屬性的實例變量。 我的問題是爲什麼我們需要這個伊娃,如果我沒有創建_name伊娃,會發生什麼? 謝謝。

+1

而這裏的其他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/ htt p://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/ –

回答

0

我的理解是,有一個默認的ivar名稱,它與屬性名稱相同。其中一個原因指定自己的,用下劃線,是消除您的二傳手歧義:

-(void) setFoo:(id) foo { 
    // here, foo should ONLY refer to the passed-in var 
    // If your ivar is the same, it is ambiguous. 
    // If your ivar is _foo, then there is clarity. 
} 
+0

哦,我明白了。所以就像在java中一樣,它會是這樣的:this.name = name,爲了清楚說明右邊的名字是參數,但是在這裏我們只用_name來區分這個,對吧? – Pan

+0

是的,在某些語言中,您必須使用'this'或'self'或其他來訪問實例變量,但不能在Objective-C中使用。它可能看起來好像self.name與只是說名字一樣,但兩者真的非常不同。 self.name *發送一條消息*(它與[self name]幾乎相同)。只是使用名稱是直接使用一個變量。 –