屬性名稱上的下劃線前綴?任何人都可以向我指出使用下劃線的解釋,我一直認為它們用于突出顯示您正在訪問iVar [_window release];而不是通過setter / getter方法訪問iVar,[[self window] release];或者[self.window release];我只是想驗證我的理解是正確。@property (nonatomic, retain) IBOutlet UIWindow *window;@property (nonatomic, retain) IBOutlet UILabel *markerLabel;@synthesize window = _window;@synthesize markerLabel = _markerLabel;
2 回答

慕森王
TA貢獻1777條經驗 獲得超3個贊
對于ivar名稱使用下劃線是Apple首先使用的慣例,用于區分實際的ivar和屬性。此后很多人都采用了這個慣例。
這樣做的原因是為了防止將新值分配給ivar而不是實際的setter的錯誤:
myIvar = newValue;
代替
self.myIvar = myValue;
如果您不小心使用了頂部示例,則可能導致內存泄漏。下劃線阻止你犯這個錯誤。

幕布斯7119047
TA貢獻1794條經驗 獲得超8個贊
這是一個慣例,你的理解聽起來不錯。
這個約定的另一個優點是你不會在不使用setter的情況下意外訪問ivar,因為
view = viewController.view ; // usually bad
如果ivar _view
代替,則不會編譯view
。
我通常不會宣布ivar,只是使用@property
和@synthesize
。如果沒有聲明明確的ivar,編譯器(至少是最近的一個)會自動生成ivar(具有相同的名稱)。因此上面的代碼編譯沒有問題,并且不用作防止不使用setter,但是你可以取消一行代碼....這可能是一件壞事,我不建議你:p
- 2 回答
- 0 關注
- 786 瀏覽
添加回答
舉報
0/150
提交
取消