iOS Runtime面試題(Category 的實現原理?)

Category 的實現原理?

被添加在了 class_rw_t 的對應結構裏。

Category 實際上是 Category_t 的結構體,在運行時,新添加的方法,都被以倒序插入到原有方法列表的最前面,所以不同的Category,添加了同一個方法,執行的實際上是最後一個。

拿方法列表舉例,實際上是一個二維的數組。

Category 如果翻看源碼的話就會知道實際上是一個 _catrgory_t 的結構體。

--
例如我們在程序中寫了一個 Nsobject+Tools 的分類,那麼被編譯爲 C++ 之後,實際上是:

static struct _catrgory_t _OBJC_$_CATEGORY_NSObject_$_Tools __attribute__ ((used,section),("__DATA,__objc__const"))
{
    // name
    // class
    // instance method list
    // class method list
    // protocol list
    // properties
}

Category 在剛剛編譯完的時候,和原來的類是分開的,只有在程序運行起來後,通過 RuntimeCategory 和原來的類纔會合併到一起。

mememovememcpy:這倆方法是位移、複製,簡單理解就是原有的方法移動到最後,根根新開闢的控件,把前面的位置留給分類,然後分類中的方法,按照倒序依次插入,可以得出的結論就就是,越晚參與編譯的分類,裏面的方法纔是生效的那個。

面試題持續整理更新中,需要拿到第一手大廠面試題及答案文檔可以添加 iOS進階學習交流羣:551346706 !結實人脈、討論技術你想要的這裏都有!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章