2012-09-07 20 views
-1

可能重複:
How does an underscore in front of a variable in a cocoa objective-c class work?的Objective-C:性能與_

我經常看到今天的聲明是這樣的:

@property SomeClass* foo; 

@synthesize foo=_foo; 

大多數例子使用ARC作爲好吧,但我不確定它是否與此相關。 我有這種感覺,我失去了一些明顯的東西,但不能把手指放在它上面。

有什麼想法?

+1

http://stackoverflow.com/search?q=objective-c+underscore – vikingosegundo

+0

據我所知,這只是風格;將變量的「公共」名稱與私人變量分開,同時保持它們的可識別性。 –

+0

Ops。是否搜索_而不是下劃線。我的錯。 謝謝你們! 投票結束這個,因爲這已經在別處回答了。 (Blush) –

回答

1

它沒有連接到ARC。 @property關鍵字是用於向編譯器(以及類用戶)表明將爲該「屬性」設置getter和setter方法的功能。在這種情況下,我們期望有一個名爲「foo」的getter方法和一個名爲「setFoo」的setter方法。 @synthesize關鍵字告訴編譯器綜合一個通用的getter和setter方法,而不是提供你自己的方法。 @synthesize foo = _foo告訴編譯器將這些泛型方法與一個名爲「_foo」的後臺實例變量進行綜合。這個_propertyName表示法是許多客觀c開發人員使用的風格選擇。基本的結果是,你得到這個代碼:

- (SomeClass *)foo 
{ 
    return _foo; 
} 

- (void)setFoo:(SomeClass *)value 
{ 
    _foo = value; 
} 

有可能編譯器中合成的getter和setter提供了一些額外的功能,但是這是它的要點。

+1

除非您指定'(弱,非原子)',它會生成用於同步和引用計數的代碼。有時候值得思考。 – tommyo

+0

非常真實,並且非常好。 –