iOS 捕获未知方法的调用,避勉抛出异常-阿里云开发者社区

开发者社区> 悟静> 正文

iOS 捕获未知方法的调用,避勉抛出异常

简介: iOS 捕获未知方法的调用,避勉抛出异常 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循“署名-非商业用途-保持一致”创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。
+关注继续查看

iOS 捕获未知方法的调用,避勉抛出异常

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)

本文遵循“署名-非商业用途-保持一致”创作公用协议

转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino否则,出自本博客的文章拒绝转载或再转载,谢谢合作。


NSObject 对象是 Objecitve-C 中的根类,其有以下两个方法,在调用 NSObject 及其子类的方法不存在时,会将这个调用封装成 NSInvocation * 类型,试图传递给 forwardInvocation: 方法,如果原方法调用的对象重载了forwardInvocation: 方法,forwardInvocation: 方法就会被调用。

forwardingTargetForSelector: 的真正用途,从官网的描述中,还是未完全体会其可用的场景,只是后一方法在做反射处理时到时用到过,参见 “iOS 实现的 json 数据源的 O-R Mapping”。

forwardingTargetForSelector:

返回未知消息首先应该转向的对象。
Returns the object to which unrecognized messages should first be directed.

- (id)forwardingTargetForSelector:(SEL)aSelector

forwardInvocation:

由子类重载,用于前转消息到其它对象。
Overridden by subclasses to forward messages to other objects.

- (void)forwardInvocation:(NSInvocation *)anInvocation
- (void)forwardInvocation:(NSInvocation *)invocation {
    
    SEL orignalSelector = [invocation selector];
    
    if ([friend respondsToSelector:orignalSelector]) {
        
        [invocation invokeWithTarget:friend];
    }
    
    else {
        
        [super forwardInvocation:invocation];
    }
}









版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SAP BTP SDK for Android 已经支持 Kotlin 了
SAP BTP SDK for Android 已经支持 Kotlin 了
3 0
推荐一个好用而且免费的XML文件查看工具,高效,易用而且可定制
推荐一个好用而且免费的XML文件查看工具,高效,易用而且可定制
3 0
修改Visual Studio Code的自定义键盘快捷键
修改Visual Studio Code的自定义键盘快捷键
6 0
查询数据,保存到CSV文件的Python代码
  #读取文本文档,生成数组,将数组元素逐一传给获取数据的函数,然后写入CSV文件。可以先运行win(),再运行mian()   import requests   from lxml import etree   from selenium import webdriver   from selenium.webdriver.common.by import By   import time
6 0
尝鲜!Mysql8.0竟然可以直接操作json文档了
  经过漫长的测试,即将整体迁移至Mysql8.0; Mysql8.0 对于Json操作新增/优化了很多相关Json的API操作; 阅读了一下官方文档,虽然绝大多数的JSON操作都是应用层完成,但是会一些Mysql的JSON语法,方便进行debug;选出基础的, 有价值的部分,供未来参考。   # 简单概述   不允许为null; Json格式定义与LONGBLOB or LONGTEXT类似;它的最大长度是受到max_allowed_packet所控制的;查看JSON字段所占用空间大小的函数时JSON_STORAGE_SIZE(xxx);除普通的Json操作,额外支持GeoJSON (
7 0
一个传入自定义 user.properties 文件生成 jMeter 执行报表出错的错误消息
一个传入自定义 user.properties 文件生成 jMeter 执行报表出错的错误消息
5 0
阿里高校ECS使用体验
1、安装服务器控制面板(宝塔面板) 2、部署WEB服务(个人博客) 3、部署Python程序 4、测试不同版本Linux使用
11 0
android安卓应用和OBD的集成场景
android安卓应用和OBD的集成场景
5 0
+关注
悟静
从事软件行业近二十年
690
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载