@iwanglong
2019-02-19T02:46:29.000000Z
字数 480
阅读 282
Runtime
iOS
数据结构
- objc_object id == objc_object
- objc_class Class == objc_class
类对象与元类对象
- 类对象存储实例方法列表
- 元类对象存储类对象方法列表
- 都是objc_class 类型
消息传递
方法缓存
- 通过hash查找,查找到选择器因子对应的bucket_t的索引对应的IMP
- 当前类中查找
- 对于已排序好的列表,采用二分查找的算法查找方法对应的执行函数
- 对于没有排序的列表,采用一般遍历查找的方法对应执行函数
- 父类逐级查找
- 开始 -> (curClass= curClass -> superClass) -> (superClass == nil) -> (YES (结束)| NO ->) (缓存是否命中) ->(YES(结束)|NO->)(方法列表是否命中)
消息转发
resolveInstanceMethod:forwardingTargetForSelector:methodSignatureForSelector:forwardInvocation:
Method-Swizzling
动态方法添加