當我使用/ 創建`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;)不會產生任何開銷,但當然只能在所涉及類的實例方法內使用。

慕森卡
TA貢獻1806條經驗 獲得超8個贊
我開始開發Cocoa時發現的差異之一是,如果我將變量設置為使用@ Property / @ Synthesize語法,而我沒有使用self.myVariable = obj或[self setMyVariable:obj]而是 myVariable = obj,如果稍后釋放obj,則不會保留該對象。(假設已將@Property設置為使用保留。)
原因是在使用myVariable = obj時未設置保留計數,而在釋放obj時,計數現在為零。(除非您自己保留它)但是通過使用訪問器,它將為您完成保留計數。(再次假設您將其設置為在聲明時使用保留)。
- 3 回答
- 0 關注
- 896 瀏覽
添加回答
舉報
0/150
提交
取消