37-ARC的工作原理

什么是ARC

Automatic Reference Counting,自動(dòng)引用計(jì)數(shù),即ARC,可以說(shuō)是WWDC2011和iOS5所引入的最大的變革和最激動(dòng)人心的變化

你已經(jīng)知道,ARC會(huì)自動(dòng)幫你插入retain和release語(yǔ)句。ARC編譯器有兩部分,分別是前端編譯器和優(yōu)化器。

1. 前端編譯器

前端編譯器會(huì)為“擁有的”每一個(gè)對(duì)象插入相應(yīng)的release語(yǔ)句。如果對(duì)象的所有權(quán)修飾符是__strong,那么它就是被擁有的。如果在某個(gè)方法內(nèi)創(chuàng)建了一個(gè)對(duì)象,前端編譯器會(huì)在方法末尾自動(dòng)插入release語(yǔ)句以銷(xiāo)毀它。而類(lèi)擁有的對(duì)象(實(shí)例變量/屬性)會(huì)在dealloc方法內(nèi)被釋放。事實(shí)上,你并不需要寫(xiě)dealloc方法或調(diào)用父類(lèi)的dealloc方法,ARC會(huì)自動(dòng)幫你完成一切。此外,由編譯器生成的代碼甚至?xí)饶阕约簩?xiě)的release語(yǔ)句的性能還要好,因?yàn)榫庉嬈骺梢宰鞒鲆恍┘僭O(shè)。在ARC中,沒(méi)有類(lèi)可以覆蓋release方法,也沒(méi)有調(diào)用它的必要。ARC會(huì)通過(guò)直接使用objc_release來(lái)優(yōu)化調(diào)用過(guò)程。而對(duì)于retain也是同樣的方法。ARC會(huì)調(diào)用objc_retain來(lái)取代保留消息。

2. ARC優(yōu)化器

雖然前端編譯器聽(tīng)起來(lái)很厲害的樣子,但代碼中有時(shí)仍會(huì)出現(xiàn)幾個(gè)對(duì)retain和release的重復(fù)調(diào)用。ARC優(yōu)化器負(fù)責(zé)移除多余的retain和release語(yǔ)句,確保生成的代碼運(yùn)行速度高于手動(dòng)引用計(jì)數(shù)的代碼。

若有更多見(jiàn)解,請(qǐng)?jiān)u論!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 什么是Automatic Reference Counting? Automatic Reference Coun...
    癲癲的戀了閱讀 3,254評(píng)論 3 23
  • 內(nèi)存管理 ARC處理原理 ARC是Objective-C編譯器的特性,而不是運(yùn)行時(shí)特性或者垃圾回收機(jī)制,ARC所做...
    b485c88ab697閱讀 11,347評(píng)論 3 47
  • 自動(dòng)引用計(jì)數(shù)(ARC)是一項(xiàng)編譯器功能,可以給Objective-C提供自動(dòng)內(nèi)存管理的能力。ARC使得程序員能專(zhuān)注...
    hlwz5735閱讀 1,805評(píng)論 0 3
  • 29.理解引用計(jì)數(shù) Objective-C語(yǔ)言使用引用計(jì)數(shù)來(lái)管理內(nèi)存,也就是說(shuō),每個(gè)對(duì)象都有個(gè)可以遞增或遞減的計(jì)數(shù)...
    Code_Ninja閱讀 1,727評(píng)論 1 3
  • 內(nèi)存管理 簡(jiǎn)述OC中內(nèi)存管理機(jī)制。與retain配對(duì)使用的方法是dealloc還是release,為什么?需要與a...
    丶逐漸閱讀 2,080評(píng)論 1 16

友情鏈接更多精彩內(nèi)容