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

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

自變量和變量差

自變量和變量差

繁華開滿天機 2019-11-20 12:33:01
當我使用/ 創建`myVariable 時,self.myVariable = obj;和之間有什么區別?myVariable = obj;@propery@synthesize
查看完整描述

3 回答

?
LEATH

TA貢獻1936條經驗 獲得超7個贊

重要的是要注意,編譯器將點語法轉換為簡單的objc_msgSend調用:也就是說,其底下的行為就像是發送給該變量的訪問器的消息一樣。因此,以下三個條件都是相同的:


self.myVariable = obj;


[self setMyVariable:obj];


objc_msgSend(self, @selector(setMyVariable:), obj);

當然,這意味著使用點語法實際上會導致完整的消息發送,這意味著調用新函數以及與之相關的所有開銷。相反,使用簡單賦值(myVariable = obj;)不會產生任何開銷,但當然只能在所涉及類的實例方法內使用。


查看完整回答
反對 回復 2019-11-20
?
慕森卡

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

我開始開發Cocoa時發現的差異之一是,如果我將變量設置為使用@ Property / @ Synthesize語法,而我沒有使用self.myVariable = obj[self setMyVariable:obj]而是 myVariable = obj,如果稍后釋放obj,則不會保留該對象。(假設已將@Property設置為使用保留。)

原因是在使用myVariable = obj時未設置保留計數,而在釋放obj時,計數現在為零。(除非您自己保留它)但是通過使用訪問器,它將為您完成保留計數。(再次假設您將其設置為在聲明時使用保留)。


查看完整回答
反對 回復 2019-11-20
  • 3 回答
  • 0 關注
  • 896 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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