OC Rumtime中IMP函数调用的示例分析
发表于:2025-11-17 作者:千家信息网编辑
千家信息网最后更新 2025年11月17日,这篇文章主要为大家展示了"OC Rumtime中IMP函数调用的示例分析",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"OC Rumtime中IMP函数调用
千家信息网最后更新 2025年11月17日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安全错误
数据库的锁怎样保障安全
长春软件开发吉网传媒实力牜
临汾中小学网络安全线上讲座
收钱软件开发
牛盾网络安全公司
赛普拉斯软件开发视频
网络技术学习方法技巧
查看mysql 数据库移动
朝阳区正规软件开发调试
日常生活中有哪些数据库管理系统
数据库设计三种范式
怀旧魔兽世界副本数据库
外文搜索引擎和数据库
广东云主机服务器技术指导
软件开发度量该做什么
泰州软件开发多少钱
漫威超级战争怎么进服务器
mc服务器设置教程
电脑一直显示服务器在运行
上海创微网络技术有限公司
地形图数据库建设技术总结
望谟软件开发有限公司
appios软件开发培训
国产网络视频服务器价格
韩服女机械技能数据库
mysql连接与断开服务器
华为mac网络技术漂移
网络安全及信息化建设文章
软件开发岗如何挑选公司
无法运行u8管理服务器
杭州圆点互联网科技有限公司