3 回答
TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊
重要的是要注意,編譯器將點(diǎn)語(yǔ)法轉(zhuǎn)換為簡(jiǎn)單的objc_msgSend調(diào)用:也就是說(shuō),其底下的行為就像是發(fā)送給該變量的訪問(wèn)器的消息一樣。因此,以下三個(gè)條件都是相同的:
self.myVariable = obj;
[self setMyVariable:obj];
objc_msgSend(self, @selector(setMyVariable:), obj);
當(dāng)然,這意味著使用點(diǎn)語(yǔ)法實(shí)際上會(huì)導(dǎo)致完整的消息發(fā)送,這意味著調(diào)用新函數(shù)以及與之相關(guān)的所有開(kāi)銷。相反,使用簡(jiǎn)單賦值(myVariable = obj;)不會(huì)產(chǎn)生任何開(kāi)銷,但當(dāng)然只能在所涉及類的實(shí)例方法內(nèi)使用。
TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊
我開(kāi)始開(kāi)發(fā)Cocoa時(shí)發(fā)現(xiàn)的差異之一是,如果我將變量設(shè)置為使用@ Property / @ Synthesize語(yǔ)法,而我沒(méi)有使用self.myVariable = obj或[self setMyVariable:obj]而是 myVariable = obj,如果稍后釋放obj,則不會(huì)保留該對(duì)象。(假設(shè)已將@Property設(shè)置為使用保留。)
原因是在使用myVariable = obj時(shí)未設(shè)置保留計(jì)數(shù),而在釋放obj時(shí),計(jì)數(shù)現(xiàn)在為零。(除非您自己保留它)但是通過(guò)使用訪問(wèn)器,它將為您完成保留計(jì)數(shù)。(再次假設(shè)您將其設(shè)置為在聲明時(shí)使用保留)。
- 3 回答
- 0 關(guān)注
- 952 瀏覽
添加回答
舉報(bào)
