iOS消息转发三部曲

作者: Zhui_Do | 来源:发表于2017-04-01 11:45 被阅读56次

消息转发三部曲

接下来的内容都和消息转发有关, 所以有必要先简单介绍一下OC的消息转发机制:

+ (BOOL)resolveInstanceMethod:(SEL)sel

当向对象发送消息而对象没有对应的实现时, 消息会通过+(BOOL)resolveInstanceMethod:方法询问具体的接收类: 没有实现的话, 你能不能现在造一个实现出来?
通常现场造出消息实现都是走的class_addMethod添加对应的实现, 然后回答YES, 那么此次消息发送算是成功的, 否则进入下一步.

- (id)forwardingTargetForSelector:(SEL)aSelector

上一步没有结果的话消息会进行二次询问: 造不出来没关系, 你告诉我谁有这个消息的对应实现? 我去它那找也行的.
此时如果返回一个能响应该消息的对象, 那么消息会转发到返回对象那里, 如果返回nil或者返回对象不能相应此消息, 进行最后一步.

- (void)forwardInvocation:(NSInvocation *)anInvocation

到了这一步, 消息发送其实算是失败了, 不会再有询问过程, 而是直接将消息携带的一切信息包裹在NSInvocation中交给对象自己处理. 另外, forwardInvocation:在构造Invocation时会调用methodSignatureForSelector:获取方法签名, 所以一般情况下还需要实现这个方法返回相应的方法签名.
此时如果对象拿到invocation中的信息有能力发起[Invacation invoke], 那么消息对应的实现还是能正常进行, 只是相对于正常的发送过程稍微麻烦耗时些, 否则就会触发消息不识别的异常返回.

相关文章

  • iOS 消息发送与转发详解

    iOS 消息发送与转发详解 iOS 消息发送与转发详解

  • iOS消息转发三部曲

    消息转发三部曲 接下来的内容都和消息转发有关, 所以有必要先简单介绍一下OC的消息转发机制: + (BOOL)re...

  • iOS理解Objective-C中消息转发机制附Demo

    iOS理解Objective-C中消息转发机制附Demo iOS理解Objective-C中消息转发机制附Demo

  • runtime系列文章总结

    《iOS Runtime详解(消息机制,类元对象,缓存机制,消息转发)》《消息转发机制与Aspects源码解析》《...

  • iOS消息转发

    title: “iOS消息转发”date: 2016-03-22 13:48:38tags: 消息转发这块,我学习...

  • ios 消息转发

    ios在类中,没有定义的函数,要走消息转发流程。如果不走消息转发流程,程序会奔溃。消息转发流程分四步调用。 第一步...

  • iOS 消息转发

    有时候我们常常看到一个cash 信息,意思是这个对象不存在这个方法,你向这个对象发送消息就会crash。 我们除了...

  • iOS 消息转发

    消息转发是Objective-C运行时的一个重要特性,具体表现是当调用一个不存在的方法时,并不会立马Crash,R...

  • ios — 消息转发

    概念 首先我们需要简单了解下,什么是oc的消息以及oc中的消息转发。先看一段简单的代码 oc中调用方法就是向对象发...

  • iOS消息转发

    类对象在接收到无法解读的消息时,会出现unrecognized selector sent to instance...

网友评论

    本文标题:iOS消息转发三部曲

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