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

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

objective-c類中變量前面的下劃線是如何工作的?

objective-c類中變量前面的下劃線是如何工作的?

iOS
函數式編程 2019-06-05 15:07:22
objective-c類中變量前面的下劃線是如何工作的?我在一些iPhone示例中看到,屬性在變量前面使用了下劃線_in。有人知道這意味著什么嗎?或者它是如何工作的?我使用的接口文件如下所示:@interface MissionCell : UITableViewCell {     Mission *_mission;     UILabel *_missionName;}@property (nonatomic, retain) UILabel *missionName;- (Mission *)mission;我不知道上面的內容到底是什么,但當我試圖設置任務名稱時,如下所示:aMission.missionName = missionName;我知道錯誤:在非結構或聯盟中請求成員“使徒名稱”
查看完整描述

3 回答

?
RISEBY

TA貢獻1856條經驗 獲得超5個贊

如果您為您的IVAR使用下劃線前綴(這只不過是一個通用約定,但很有用),那么您需要多做一件事情,以便自動生成的訪問器(用于屬性)知道要使用哪個IVAR。具體來說,在您的實現文件中,synthesize應該是這樣的:

@synthesize missionName = _missionName;

更籠統地說,這是:

@synthesize propertyName = _ivarName;


查看完整回答
反對 回復 2019-06-05
?
茅侃侃

TA貢獻1842條經驗 獲得超21個贊

這只是一個可讀性的慣例,它對編譯器沒有什么特別的作用。您將看到人們在私有實例變量和方法名稱上使用它。實際上,蘋果建議不要使用下劃線(如果你不小心,你可以在超類中覆蓋一些東西),但是你不應該因為忽視這個建議而感到難過。*)


查看完整回答
反對 回復 2019-06-05
?
縹緲止盈

TA貢獻2041條經驗 獲得超4個贊

我看到的唯一有用的目的是像上面提到的那樣區分局部變量和成員變量,但這不是一個必要的約定。當與@屬性配對時,它會增加合成語句的詳細性-@synthesize missionName = _missionName;到處都很丑。

不要使用下劃線,只需在不沖突的方法中使用描述性變量名。當他們必須沖突的時候,方法中的變量名應該帶有下劃線,而不是多個方法可能使用的成員變量。..唯一有用的地方是在setter或init方法中。此外,它將使@合成語句更加簡潔。

-(void)setMyString:(NSString*)_myString{
    myString = _myString;}

編輯:有了自動合成的最新編譯器特性,我現在用下劃線來表示IVAR(在非常罕見的情況下,我需要使用IVAR來匹配自動合成所做的事情)。


查看完整回答
反對 回復 2019-06-05
  • 3 回答
  • 0 關注
  • 842 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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