2012-03-29 58 views
6

在最近的Xcode 4.3項目模板雙下劃線差異,因此一些@synthesze被聲明爲:單,在聲明@synthesize

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

一些配有雙下劃線(__)作爲前綴。爲什麼?

readonly屬性有關嗎?

@property (strong, nonatomic) UIWindow *window; 
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext; 
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel; 
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator; 
@property (strong, nonatomic) UINavigationController *navigationController; 

回答

3

他們可能不應該使用雙下劃線,如果他們打算在自己的程序中使用。我希望這只是編寫該模板示例的人的疏忽。在實踐中,他們不太可能會導致任何問題。

C標準保留所有標識符,以雙下劃線開始,供實施自己使用。由於Objective-C是C的超集,因此您不應該在Objective-C程序中使用這些標識符。從C規範,部分7.1.3保留標識符

以下劃線和一個大寫字母或另一個下劃線開頭,始終保留用於任何用途的所有標識符。

1

可能在這種情況下。一般來說,蘋果傾向於使用_前綴名稱來引用變量的外部副本(例如,當作爲函數傳遞時,或直接引用而不是屬性)。編寫代碼的人可能認爲他們通過爲read-only添加一個額外_而變得聰明,但這通常是不好的做法,因爲C保留__來指定編譯器指令。

我從來沒有見過C編譯器抱怨__ vars,而LLVM似乎並不介意,但它可能不是很好的做法。