2011-05-18 81 views
18

可能重複:
Underscore prefix on property name?帶下劃線前綴的合成屬性和變量:這是什麼意思?

這是什麼意思? @synthesize window=_window;我知道一般意味着「有些班」有一個窗口,但爲什麼要用_window而不只是window?這是一個命名空間的東西?

+0

看看這個相關的問題:http://stackoverflow.com/questions/3521254/prefixing-property-names-with-an-underscore-in-objective-c – filipe 2011-05-18 18:24:44

+2

Duplicates:[1](http:// stackoverflow .com/questions/3521254)[2](http://stackoverflow.com/questions/822487/)[3](http://stackoverflow.com/questions/2371489)[4](http:// stackoverflow。 COM /問題/ 5582448 /)[5](http://stackoverflow.com/questions/837559/)等等...](http://stackoverflow.com/search?q=objc+property+underscore ) – 2011-05-18 21:08:02

回答

25

我會在描述基本的英語這個編程約定給一展身手。

它在其他語言名成員變量非常常見的約定與前面的mm_,或_來區分它們從局部聲明的變量,並表示,他們應該存取寫的,如果必要的話(不classInstance.m_Variable = 5)。

如果一個Objective-C編程聲明該約定的ivars(他們應該),並使用基本語法@synthesize _window;則該屬性的使用變得有些難看:classInstance._window = myWindow[classInstance set_window:myWindow]。使用語法@synthesize window=_window;允許的OBJ-C程序員利用一個流行的編程標準(與前述_實例變量),而同時具有使用Apple標準classInstance.window = myWindow[classInstance setWindow:myWindow]屬性訪問。

3

簡短的回答是:下劃線只是強調一個事實,即類變量是「私有」的一類,你應該訪問有用的公約他們通過他們的財產。

你可以聲明不帶前導下劃線的window變量;在這種情況下,@synthetize語句將會是:@synthetize window,而且它實際上是一樣的。

已久的答案,張貼aherlambang鏈接是真正有趣的閱讀...

相關問題