美文网首页
消息传递和消息转发

消息传递和消息转发

作者: 愤怒的牛牛 | 来源:发表于2019-08-13 10:46 被阅读0次

当调用一个方法 run 之后

oc方法会转变为objc_msgSend(id theReceiver, SEL selectot,……);

判断receiver是否为nil,如果是nil的话则不往下执行,返回nil,这就是为什么在oc中一个nil发送消息不会引起奔溃。

1、从方法的缓存中查找被调用过的方法会存在缓存里面,每个类都会有一个表来存被调用过的方法,以便下次更快的调用。

2、从本类的方法表(dispatch table)中查找方法寻找selector,找到则写入缓存,返回方法。否则再从父类中查找方法,如此往复,直到达到基类。如果找不到则执行方法的动态解析。

3、方法的动态解析:调用+ (BOOL)resolveInstanceMethod:(SEL)sel方法来查看是否能够返回一个selector,如果存在则返回selector。不存在进入下一步。

4、备用接受者- (id)forwardingTargetForSelector:(SEL)aSelector这个方法来询问是否有接受者可以接受这个方法呀。如果有人接受,则交给它处理,就好像一切都没发生过一样。

5.选择器方法签名- (NSMethodSignature*)methodSignatureForSelector:(SEL)aSelector这个方法返回签名

选择器方法签名

6、方法的转发:如果到这一步还不能够找到相应的Selector的话,就要进行完整的方法转发过程。调用方法-(void)forwardInvocation:(NSInvocation *)anInvocation

最后还是没有找到的话就只有呵呵了,这时候unrecognized selector sent to instance 0x100111df0'的错误就来了。

愤怒的牛牛的简书

愤怒的牛牛的新浪博客

愤怒的牛牛的GitHub

相关文章

  • 消息传递和消息转发

    当调用一个方法 run 之后 oc方法会转变为objc_msgSend(id theReceiver, SEL s...

  • runtime -消息传递和消息转发

    1.问题来源: 当我们对一个对象或者类调用对应的方法后,系统底层是如何实现的呢? 2.验证问题,探究 开发中遇以下...

  • OC中消息传递和消息转发

    Objective-C是一门面向运行时的语言,它尽可能的把一些编译和链接时需要执行的逻辑延迟到运行时,使Runti...

  • 详解Runtime消息传递和消息转发

    消息传递和消息转发 Objective-C 是一个动态语言,这意味着它不仅需要一个编译器,也需要一个运行时系统来动...

  • Runtime

    相关简单介绍 消息机制消息传递机制消息转发机制-动态添加方法消息转发机制-快速转发消息转发机制-慢速转发消息转发机...

  • 消息传递和转发原理

    消息传递流程先会调用objc_msgSend方法,首先在Class中的缓存查找IMP,没有缓存则初始化缓存,类对象...

  • iOS消息转发机制

    消息转发机制: 消息转发机制是相对于消息传递机制而言的。 1、消息(传递)机制 RunTime简称运行时。就是系统...

  • 【iOS】消息传递机制和消息转发机制

    在Objective-C中,方法的调用理解为对象接受消息。 运行时调用的方法告诉对象要干什么,给对象传递一个消息。...

  • IOS 消息传递与消息转发

    1、方法method和selector(选择子)有什么关系 在 Objective-C 中,selector,Me...

  • OC的消息传递机制和消息转发机制

    绪:静态绑定:编译时期便能确定所要调用的函数。动态绑定:运行时期才能确定所要调用的函数。 一. 消息传递机制。 1...

网友评论

      本文标题:消息传递和消息转发

      本文链接:https://www.haomeiwen.com/subject/upcvjctx.html