2011-12-07 28 views
2

當閱讀蘋果生成的模板代碼以及文檔時,我看到_(下劃線)和__(雙下劃線)。示例是在覈對數據選項時生成的代碼:生成的代碼中的主要下劃線

@synthesize window = _window; 
@synthesize managedObjectContext = __managedObjectContext; 
@synthesize managedObjectModel = __managedObjectModel; 
@synthesize persistentStoreCoordinator = __persistentStoreCoordinator; 

這是什麼意思?我明白_是指支持私有變量。 __是什麼意思?

+0

猜猜它已經在這個線程http://stackoverflow.com/questions/5466496/why-rename-synthesized-properties-in-ios-with-leading-underscores –

+0

了很好的解釋這只是一個命名約定...不知道什麼是__試圖說,但它可能是一個更私人的變量。 – Felix

+0

布魯斯李,我看到了這個鏈接,它沒有提到任何關於雙下劃線的內容 – Vinod

回答

0

Apple的文檔建議不要在您的項目中使用單個下劃線(因爲它由蘋果自己保留:最着名的示例是_cmd)。但下劃線是標識符私有性的傳統c-style修飾符,因此雙下劃線是爲您的變量創建私有標識符的解決方案。

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CodingGuidelines/Articles/NamingMethods.html的Cocoa框架中最私密的方法

名稱有 下劃線前綴(例如,_fooData),以紀念他們爲私人。 從這個事實出發遵循兩個建議。

Don’t use the underscore character as a prefix for your private methods. Apple reserves this convention. 
1

當你使用getter/setter方法和直接訪問伊娃時,它乍一看往往令人困惑。

替代方法是命名伊娃不同於財產。一種常見的方法是使用下劃線前綴實例變量的名字,像這樣 -

@interface RootViewController : UITableViewController 
{ 
    NSDate *_timestamp; 
} 
@property (nonatomic, retain) NSDate *timestamp; 

要連接的屬性(其名至今未變)的sythensize聲明得到一個額外的選項:

@implementation RootViewController 

@synthesize timestamp = _timestamp; 

從本質上講,如果一個ObjectiveC程序員聲明ivars遵循這個約定(他們應該)並使用基本語法@synthesize _window;那麼該屬性的使用會變得有些難看:classInstance._window = myWindow[classInstance set_window:myWindow]。使用語法@synthesize window=_window;允許Obj-C程序員使用流行的編程標準(在_之前的ivars),同時具有使用Apple標準classInstance.window = myWindow[classInstance setWindow:myWindow]的屬性訪問器。