消息转发的三个阶段

1.消息发送
判断消息接受者是否为空,为空进入下个阶段。(一个没有实现只有声明的实例对象)
不为空,从类对象的缓存中查找。找到,缓存到缓存中,找不到,在自己的rw_t的menthodlist里找,找到就缓存到缓存中。
找不到,去父类缓存中查找,找到,缓存到自己的缓存中,找不到,方法列表中找,找到,缓存自己列表中。
2.动态消息解析
resolveInstanceMethod:(SEL)sel{}
3.消息转发
forwardingTargetForSelector:(SEL)aSelector,如果返回值是一个对象,把消息转发给这个对象处理。如果返回值是一个对象的花,执行的方法其实就是objc_msgSend(forwarding方法的返回值对象,sSelector); 如果返回为空,执行下面的;
消息签名, methodsignatureselector:(SEL)aSelector{}。如果返回一个消息签名,如果不为空则向下执行,否则报错。unrecogenize。。。。。
然后消息转发forwardInvocaion:(NSInvocation *) anInvocation
anInvocation中封装了三个参数,方法调用者,方法名,方法参数
到这个方法中 可以任由自己随意处理
如果还法处理,执行unrecongized slector

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容