亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

屬性名稱上的下劃線前綴?

屬性名稱上的下劃線前綴?

肥皂起泡泡 2019-08-19 17:24:35
屬性名稱上的下劃線前綴?任何人都可以向我指出使用下劃線的解釋,我一直認為它們用于突出顯示您正在訪問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;

如果您不小心使用了頂部示例,則可能導致內存泄漏。下劃線阻止你犯這個錯誤。


查看完整回答
反對 回復 2019-08-19
?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

這是一個慣例,你的理解聽起來不錯。

這個約定的另一個優點是你不會在不使用setter的情況下意外訪問ivar,因為

view = viewController.view ; // usually bad

如果ivar _view代替,則不會編譯view。

我通常不會宣布ivar,只是使用@property@synthesize。如果沒有聲明明確的ivar,編譯器(至少是最近的一個)會自動生成ivar(具有相同的名稱)。因此上面的代碼編譯沒有問題,并且不用作防止不使用setter,但是你可以取消一行代碼....這可能是一件壞事,我不建議你:p


查看完整回答
反對 回復 2019-08-19
  • 2 回答
  • 0 關注
  • 786 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號