iOS中消息机制的处理

上一篇文章说道了消息的转发,*说到了调用一个类的方法时,先在本类中的方法缓存列表中进行查询,如果在缓存列表中找到了该方法的实现,就执行,如果找不到就在本类中的方列表中进行查找。在本类方列表中查找到相应的方法实现后就进行调用,如果没找到,就去父类中进行查找。如果在父类中的方法列表中找到了相应方法的实现,那么就执行,否则就执行下方的几步。*

当调用一个方法在缓存列表,本类中的方法列表以及父类的方法列表找不到相应的实现时,到程序崩溃阶段中间还会有几步让你来挽救。接下来就来看看这几步该怎么走。
1、消息处理(Resolve Method)
当前响应的类以及父类中找不到类方法实现时会执行+resolveInstanceMethod:这个类方法。该方法如果在类中不被重写的话,默认返回NO,如果返回NO就表明不做任何的处理,走下一步,如果返回YES的话,就说明在该方法中堆这个找不到的实现进行了处理。在该方法中,我们可以为找不到实现的SEL动态的添加上一个方法的实现,添加完毕后,就会执行我们添加方法的实现。这样,当一个类调用不存在的方法时,就不会崩溃了。

这里写图片描述

2、消息快速转发
如果不对上述消息进行处理的话,也就是+resolveInstanceMethod:返回NO时,会走下一步消息转发,即-forwardingTargetForSelector:。该方法会返回一个类的对象,这个类的对象有SEL对应的实现,当调用这个找不到的方法时,就会被转发到SecondClass中去进行处理。这也就是所谓的消息转发。当该方法返回self或者nil, 说明不对相应的方法进行转发,那么就该走下一步了。
这里写图片描述

3、消息常规转发

如果不将消息转发给其他类的对象,那么就只能自己进行处理了。如果上述方法返回self的话,会执行-methodSignatureForSelector:方法来获取方法的参数以及返回数据类型,也就是说该方法获取的是方法的签名并返回。如果上述方法返回nil的话,那么消息转发就结束,程序崩溃,报出找不到相应的方法实现的崩溃信息。

在+resolveInstanceMethod:返回NO时就会执行下方的方法,下方也是讲该方法转发给SecondClass,如下所示:
这里写图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iOS的JavaScriptCore是一个框架,它提供了将JavaScript代码嵌入到iOS应用程序的功能。它是基于WebKit引擎的一部分,可以让开发者在iOS应用执行JavaScript代码,并且可以实现JavaScript与Objective-C之间的相互调用。 JavaScriptCore框架提供了以下主要功能: 1. 执行JavaScript代码:可以使用JavaScriptCore框架来执行JavaScript代码,包括解析和执行JavaScript脚本文件。 2. JavaScript与Objective-C的相互调用:可以在Objective-C代码调用JavaScript函数,并且可以在JavaScript代码调用Objective-C方法。这种相互调用可以实现iOS应用与JavaScript之间的数据交互和功能扩展。 3. JavaScript对象与Objective-C对象的转换:JavaScriptCore框架提供了将JavaScript对象转换为Objective-C对象的功能,以及将Objective-C对象转换为JavaScript对象的功能。这样可以方便地在JavaScript和Objective-C之间传递数据。 4. JavaScript上下文管理:可以创建和管理多个JavaScript上下文,每个上下文都有自己的全局对象和执行环境。这样可以实现多个独立的JavaScript环境,避免不同模块之间的命名冲突。 5. JavaScript异常处理:JavaScriptCore框架提供了处理JavaScript异常的机制,可以捕获和处理JavaScript代码的异常情况。 使用JavaScriptCore框架,开发者可以将JavaScript代码嵌入到iOS应用,实现一些动态的功能和交互效果。比如,在一个网页浏览器应用,可以使用JavaScriptCore框架来执行网页的JavaScript代码,并且可以在Objective-C代码调用JavaScript函数,实现与网页的交互。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值