美文网首页iOS开发- Runtime
runtime消息转发机制

runtime消息转发机制

作者: 海牛骑士 | 来源:发表于2018-04-14 21:19 被阅读67次

消息转发机制基本上分为三个步骤: 

1. 动态方法解析 2. 备用接收者 3. 完整转发 

我们可以通过控制这三个步骤其中一环来解决这一个问题

特别注意:如果是正常类的消息,是不会走到这三个步骤的。所以走到这三个不步骤的前提条件已经确定该消息为未知消息

1.动态方法解析

新建一个person类并给person类添加一个方法

#import

@interface Person : NSObject

//方法

-(void)sendMessage:(NSString*)message;

@end

.m文件简单去实现一下

//实现

-(void)sendMessage:(NSString*)message

{

    NSLog(@"大家好才是真的好oooooooooõ,%@",message);

}

我们将该类导入视图控制器中 调用 

我们调用了sendMessage: 并随便添加了一个Person类中没有声明和实现的boy: 

这个时候会出现第一个方法控制台打印正常 ,第二个控制台显示未找到该方法而程序出现崩溃。

这个时候我们怎么去处理这个异常呢,我们就要用到了runtime消息转发 先在person类中倒入<objc/runtime>

进行动态方法解析

重载+(BOOL)resolveInstanceMethod:(SEL)sel方法

//runtime环境下重载

动态方法解析之后再

运行就 不会发生崩溃

2.备用接收者

当我们动态方法解析也无法处理这个消息的时候(注释动态方法解析) 我们就要调用备用接受者

-(id)forwardingTargetForSelector:(SEL)aSelector

新建一个gender类并添加了一个boy:的方法对象实现

在person类中实现如下 

这个时候我们发现备用消息处理成功 程序也没有出现cash 控制台打印如下

3.启用完整转发 

当我们备用接收者也无法处理该消息的时候,我们就必须走完整转发流程(备注:完整转发对性能消耗很大)

启用完整消息转发 -(void)forwardInvocation:(NSInvocation*)anInvocation

首先进行方法签名调用-(NSMethodSignature*)methodSignatureForSelector:(SEL)aSelector方法

进过完整消息转发这一步成功 控制台打印  成功完成消息转发

当所有的都不能解决

//全部消息都无法转发的话  就调用

//-(void)doesNotRecognizeSelector:(SEL)aSelector

//{

//    NSLog(@"此消息无法处理");

//}

小结:这就是runtime消息转发  开始用打开runtime 的大门

相关文章

  • runtime系列文章总结

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

  • Runtime 的应用

    前面我们说到:Runtime 消息传递机制Runtime 消息转发机制Runtime 交换方法今天我们来谈谈Run...

  • Effective Objective-C读后笔记(2)

    11、runtime消息转发机制 runtime的消息转发流程图消息转发 消息转发的示例实现 这里也给大家推荐一篇...

  • iOS - Runtime - 概念和方法交换

    runtime的概述runtime的相关概念runtime消息机制消息传递动态方法解析消息转发runtime的作用...

  • iOS消息转发机制

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

  • Runtime知识点整理1

    OC消息机制?消息转发机制流程?什么是Runtime?什么场景下使用? ==============巴拉巴拉......

  • runtime消息转发机制

    消息转发机制基本上分为三个步骤: 1. 动态方法解析 2. 备用接收者 3. 完整转发 我们可以通过控制这三个步骤...

  • Runtime 消息转发机制

    在编译期,向对象或者类对象发送了其无法解读的消息并不会报错,因为在运行期可以继续向类和元类(metaClass)中...

  • runtime:消息转发机制

    若想令类能理解某条消息,我们必须以程序码实现出对应的方法才行。但是,在编译期向类发送了无法解读的消息并不会报错,因...

  • runtime消息转发机制

    Objective-C 扩展了 C 语言,并加入了面向对象特性和 Smalltalk 式的消息传递机制。而这个扩展...

网友评论

    本文标题:runtime消息转发机制

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