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函数

  • 动态运行时语言将函数决议推迟到运行时
  • 编译时语言在编译器进行函数决议
相关文章
相关标签/搜索