iOS中ARC內部原理

斯人如是丶發表於2016-05-13

原文連結:http://blog.csdn.net/meegomeego/article/details/11898495


你已經知道,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語句,確保生成的程式碼執行速度高於手動引用計數的程式碼。

在第28章中你會看到有關ARC內部工作原理的更多內容。

相關文章