美文网首页
Objective-C中调用方法的过程

Objective-C中调用方法的过程

作者: 唯忆青语 | 来源:发表于2021-03-08 11:01 被阅读0次

    (1)消息传递流程

    (a)程序在运行时,runtime库会根据对象的isa指针找到对象所属的类,然后在类的缓存中寻找同名方法实现IMP,如果没找到就去类的方法列表中寻找可执行方法。

    (b)若本类没有就去本类的父类中寻找,父类找不到再向父类的父类寻找,直至根元类。

    (c)期间找到了方法的函数实现,就调用函数指针到对应的函数进行执行,如果此时仍然未找到,就会进入消息转发流程。

    (2)消息转发流程

    (a)动态方法解析 Method resolution:询问接收者所属的类,能不能动态添加方法。能动态添加则去调用方法,不能动态添加进入下一步

    (b)快速转发Fast forwarding:询问接收者 有没有其他对象可以处理这个方法,有则将方法转发给这个类,没有则进入下一步。如果没有接收者没有其他备援对象,则也会进入下一步。

    (c)完整消息转发Normal forwarding:首先去获取函数签名,获取到了函数签名后会封装一个NSInvocation对象并发送forwardInvocation消息给目标对象。 无法获取到签名则会发出doesNotRecognizeSelector消息,然后crash。

    相关文章

      网友评论

          本文标题:Objective-C中调用方法的过程

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