RunTime

一、數據結構

共用體isa

  • 對象的isa指向類對象
  • 類對象的isa指向元類對象
cache_t
  • 用於快速查找方法執行函數
  • 可增量擴展的哈希表結構
  • 局部性原理的應用

class_data_bits_t
  • class_data_bits_t 主要是對class_rw_t的封裝
  • class_rw_t表明了類相關的讀寫信息、對class_ro_t的封裝
  • class_ro_t表明了類相關的只讀信息
class_rw_t

method_t

二、類對象與元類對象

  • 類對象存儲實例方法列表等信息
  • 元類對象存儲類方法列表等信息

三、消息傳遞

void objc_msgSend(void /* id self, SEL op, ....*/)
[self class] <=> objc_msgSend(self. @selector(class))

void objc_msgSendSuper(void /* struct objc_super *super, SEL op, ...*/)
struct objc_super {
    __unsafe_unretained id receiver;
}
[super class] <=> objc_msgSendSuper(super, @selector(class))
複製代碼

四、方法緩存查找

以SEL爲能夠,經過hash查找具體IMP緩存

當前類中查找

一、對於已排序的方法列表,採用二分查找 二、對於未排序的方法列表,採用通常遍歷數據結構

五、消息轉發

六、Method-Swizzling

七、動態添加方法

class_addMethod(self, @selector(deletionMethod), addedMethod, "v@:");
複製代碼

八、動態方法解析

@dynamic函數

  • 動態運行時語言將函數決議推遲到運行時
  • 編譯時語言在編譯器進行函數決議
相關文章
相關標籤/搜索