iOS 2019年2月学习记录

2019-03-12  本文已影响0人  quantiza
  1. 消息发送与转发
    1.1 简介
    OC的消息机制是通过runtime实现的,消息发送是通过selector快速查找IMP的过程;消息转发是在查找IMP失败是进行重新进行方法解析或转发的过程。如果查找IMP失败后不做转发处理或转发失败,程序会抛出异常unrecognized selector
    1.2 消息发送机制(Runtime快速查找IMP的过程)
    1)通过实例变量的isa指针确定class
    2)如果是实例方法,在class的methodLists里查找IMP,查找不到就到superclass里查找;如果是类方法,在metaclass里查找IMP,查找不到再到metaclass指向的的superclass里查找
    3)为了提高查找效率在第二步查找之前其实是在class的cache里先查找,查不到后再执行第(2)步
    4)一旦找到跳转到IMP指针指向的方法实现,执行函数。否则,开始转发。
    1.3 Method, SEL, IMP, selector
    SEL, IMP是OC关键字,Method的结构体为如下,通过@selector(name)把name转出SEL编号,让后在methodLists里找到对应的Method,在Method里找到IMP,通过IMP调用方法实现。消息发送中的message指的应该是@selector
    image.png
    1.4 转发过程
    上面消息发送失败后会进行消息转发,包括3步
    1)方法解析(Method resolution)
    + (BOOL)resolveInstanceMethod:(SEL)sel
    + (BOOL)resolveClassMethod:(SEL)sel
    2)快速转发(Fast forwarding)
    - (id)forwardingTargetForSelector:(SEL)aSelector
    3)常规转发(Normal forwarding)
    - (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
    - (void)forwardInvocation:(NSInvocation *)anInvocation
    1.5 Normal forwarding和Fast forwarding的区别
    1)发送的消息不同
    2)转发给的对象数量不同
    1.6 应用
    1)崩溃预防处理,把不可处理的消息转发统一处理了
    2)多继承,
上一篇 下一篇

猜你喜欢

热点阅读