尋址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
class_rw_t提供了運行時對類擴展的能力,class_ro_t存儲的是類在編譯時就確定的一些信息
types實際上包含了函數的返回值和參數
Runtime的基礎數據結構全局圖如下
打印結果都爲Phone,super class只是從父類開始查找class方法,因爲class實際上是在NSObject中實現的,並沒有繼承類重寫
super的receiver指向也是self,方法的接受者
消息轉發處理細節