什么是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)化器。
前端編譯器會(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)取代保留消息。
雖然前端編譯器聽(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論!