3 回答

TA貢獻1834條經驗 獲得超8個贊
您所看到的是使用下劃線來區分實例變量和屬性。因此,一個類聲明可能是:
@interface Foo {
NSString* _label;
....
}
@property (nonatomic, retain) NSString* label; // notice: no underline
然后,在實現文件中,您將擁有:
@synthesize label=_label; // the property is matched with the ivar
現在,在實現內部,如果您想直接訪問實例變量,則可以使用,_label而要使用屬性訪問器方法(該方法負責保留/釋放以及其他一系列簿記任務)self.label。從外面看,您總是想要穿過該{object}.label物業。
另一種方法是不帶下劃線而僅使用:
NSString* label;
@property (nonatomic, retain) NSString* label;
...
@synthesize label;
它的工作原理相同,但那么它可能會混淆的人讀的代碼,并試圖跟蹤labelVS self.label。我個人覺得Apple約定(帶下劃線)更容易閱讀,但這是優先選擇的問題。

TA貢獻1847條經驗 獲得超11個贊
正如人們已經說過的_someVar曾經說過,變量是私有的。這是一個簡單的約定,并不重要。
另一個用途是,在C中使用Wayback機器旅行時,_function()表示該功能不是平臺可移植的,而__function()則表示該功能不是編譯器可移植的。因此,在標準C庫中,有時會看到名稱前帶有_或__的變量,這就是這些函數所代表的含義。
- 3 回答
- 0 關注
- 448 瀏覽
添加回答
舉報