ARC會自動插入retain
和release
語句。ARC編譯器有兩部分,分別是前端編譯器和優化器。前端
前端編譯器會爲「擁有的」每個對象插入相應的release
語句。若是對象的全部權修飾符是__strong
,那麼它就是被擁有的。若是在某個方法內建立了一個對象,前端編譯器會在方法末尾自動插入release
語句以銷燬它。而類擁有的對象(實例變量/屬性)會在dealloc
方法內被釋放。事實上,你並不須要寫dealloc
方法或調用父類的dealloc
方法,ARC會自動幫你完成一切。此外,由編譯器生成的代碼甚至會比你本身寫的release
語句的性能還要好,由於編輯器能夠做出一些假設。在ARC中,沒有類能夠覆蓋release
方法,也沒有調用它的必要。ARC會經過直接使用objc_release
來優化調用過程。而對於retain
也是一樣的方法。ARC會調用objc_retain
來取代保留消息。編輯器
雖然前端編譯器聽起來很厲害的樣子,但代碼中有時仍會出現幾個對retain
和release
的重複調用。ARC優化器負責移除多餘的retain
和release
語句,確保生成的代碼運行速度高於手動引用計數的代碼。性能