iOS中ARC內部原理

ARC會自動插入retainrelease語句。ARC編譯器有兩部分,分別是前端編譯器和優化器。前端

1. 前端編譯器

前端編譯器會爲「擁有的」每個對象插入相應的release語句。若是對象的全部權修飾符是__strong,那麼它就是被擁有的。若是在某個方法內建立了一個對象,前端編譯器會在方法末尾自動插入release語句以銷燬它。而類擁有的對象(實例變量/屬性)會在dealloc方法內被釋放。事實上,你並不須要寫dealloc方法或調用父類的dealloc方法,ARC會自動幫你完成一切。此外,由編譯器生成的代碼甚至會比你本身寫的release語句的性能還要好,由於編輯器能夠做出一些假設。在ARC中,沒有類能夠覆蓋release方法,也沒有調用它的必要。ARC會經過直接使用objc_release來優化調用過程。而對於retain也是一樣的方法。ARC會調用objc_retain來取代保留消息。編輯器

2. ARC優化器

雖然前端編譯器聽起來很厲害的樣子,但代碼中有時仍會出現幾個對retainrelease的重複調用。ARC優化器負責移除多餘的retainrelease語句,確保生成的代碼運行速度高於手動引用計數的代碼。性能

相關文章
相關標籤/搜索