4、消息转发机制

2020-07-16  本文已影响0人  Shineyok

objc_msgSend需要动态查找自己要调用哪个方法, 会根据@selector的名字动态查找对应的方法,首先在当前类的方法缓存里查找,如果查不到就去当前类的方法列表中查找,依旧查不到则去父类按同样顺序查找,直到NSObject类都没查找到,就会进入消息转发流程

1、执行+ (BOOL)resolveInstanceMethod:(SEL)sel或者+ (BOOL)resolveClassMethod:(SEL)sel进行动态方法解析,可以动态添加一个方法, 防止程序崩溃

2、执行- (id)forwardingTargetForSelector:(SEL)aSelector,快速消息转发,让其他对象处理这个函数

3、执行- (void)forwardInvocation:(NSInvocation *)anInvocation, 标准消息转发。调用forwardInvocation之前, 会执行获取方法签名方法 - (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector, 如果返回值非空则通过forwardInvocation:转发消息, 返回值为空则向当前对象发送doesNotRecognizeSelector:消息,程序崩溃退出

4、如果以上都没有进行处理,就会调用- (void)doesNotRecognizeSelector:(SEL)aSelector, 程序崩溃

上一篇下一篇

猜你喜欢

热点阅读