OC Rumtime中IMP函数调用的示例分析
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇文章主要为大家展示了"OC Rumtime中IMP函数调用的示例分析",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"OC Rumtime中IMP函数调用
千家信息网最后更新 2025年02月01日OC Rumtime中IMP函数调用的示例分析
这篇文章主要为大家展示了"OC Rumtime中IMP函数调用的示例分析",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"OC Rumtime中IMP函数调用的示例分析"这篇文章吧。
OC 运行时(runtime),测试了一个函数class_replaceMethod,具体如下:
IMP originalMethod;NSString *CustomUppercaseString(id SELF,SEL _CMD){ NSLog(@"BeginConverting。。。"); NSString *result=originalMethod(SELF,_CMD); NSLog(@"EndConverting。。。"); return result;}
Implementation中:
- (void)runtimeTest{ originalMethod=[NSString instanceMethodForSelector:@selector(uppercaseString)]; class_replaceMethod([NSString class], @selector(uppercaseString), (IMP)MyUppercaseString,NULL); NSString *s=@"zhang lei"; NSLog(@"uppercase:%@",[s uppercaseString]);}
运行过程中在下面这行报错:
NSString *result=originalMethod(SELF,_CMD);
①先是提示参数太多,问百度说是IMP本身包含了self和_cmd俩参数,不用再显示传参。去掉参数后继续报错。
②提示在ARC下无法将void *转换为id。关闭ARC后依旧出错,还是无法转换。
当我查看IMP的定义时发现了这个:
/// A pointer to the function of a method implementation. #if !OBJC_OLD_DISPATCH_PROTOTYPEStypedef void (*IMP)(void /* id, SEL, ... */ ); #elsetypedef id (*IMP)(id, SEL, ...); #endif
报错的主要原因是因为IMP取的是if中的定义,返回void *,于是怀疑项目编译设置上设置的不对。继续搜百度找到如下内容:
"使用XCode6.X的小伙伴们要特别注意了,需要先到项目的构建设置里面把Apple LLVM 6.0 - Preprocessing 的Enable Strict Checking of objc_msgSend Calls 选项设置为NO,否则result = imp(clazz, sel);会报错的!!"
于是按照上面说的进行了设置,运行成功。并且经过调试,发现确实是Enable Strict Checking of objc_msgSend Calls控制着OBJC_OLD_DISPATCH_PROTOTYPES的取值。
以上是"OC Rumtime中IMP函数调用的示例分析"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
函数
内容
示例
分析
参数
篇文章
运行
项目
学习
帮助
提示
不对
成功
不用
原因
小伙
小伙伴
易懂
更多
条理
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
中国民营医院数据库
学java软件开发难吗
游戏王k社数据库
导出jar登录数据库失败
怪物猎人3g数据库 下载
das数据库最新消息
项目软件开发岗位流程图
用vga配置服务器
IT网络技术经理
陈鑫杰网络安全全栈视频下载
搞软件开发前景
网络安全上党委会的必要性
web网络安全培训机构
我的世界服务器刷怪笼
对网络安全的认识与了解
华为路由器交换机网络技术
5e无法进入安全服务器
徐州互联网智慧工厂软件开发
楚留香进不去服务器
虚拟教室数据库设计
中兴服务器专列是哪一趟车
软件开发在哪里可以兼职
软件开发服务公司推荐
莆田it服务管理软件开发
福仕德教育科技互联网
视频安防软件开发
网络安全风险提示单
软件开发有哪些税收优惠
世界网络技术最发达的国家
中国进口车汽车市场数据库