Runtime篇



尋址40位就能準確尋址,非指針型isa設計是節省內存做法



局部性原理可以理解爲將調用頻率最高的方法放到緩存,避免到方法列表中遍歷查找,提高了效率



cache_t的結構,這應該是一個bucket_t的結構體數組,mask是總數量,_occupied是已使用的數量。理論上來說,爲了實現快速查找,這個bucket應該是指向一個哈希表。
struct cache_t {
    struct bucket_t *_buckets;
    mask_t _mask;
    mask_t _occupied;
public:
    struct bucket_t *buckets();
    mask_t mask();
    mask_t occupied();
    ...
}

bucket的結構,就是一個key和一個IMP,key其實就是@seletor,IMP是一個無類型的函數指針,調用方法時通過sel哈希查找快速定位到相對應的bucket_t然後對應提取出IMP

iOS方法緩存和查找詳解



class_rw_t提供了運行時對類擴展的能力,class_ro_t存儲的是類在編譯時就確定的一些信息


types實際上包含了函數的返回值和參數



Runtime的基礎數據結構全局圖如下



打印結果都爲Phone,super class只是從父類開始查找class方法,因爲class實際上是在NSObject中實現的,並沒有繼承類重寫

super的receiver指向也是self,方法的接受者




消息轉發處理細節


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