OC Rumtime中IMP函数调用的示例分析
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要为大家展示了"OC Rumtime中IMP函数调用的示例分析",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"OC Rumtime中IMP函数调用
千家信息网最后更新 2026年11月02日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安全错误
数据库的锁怎样保障安全
花魁咖啡
广州大一互联网络科技有限公司
西安纸贵互联网科技有限公司
云信互联网科技有限公司
互联网科技公司华为
科技赋能下的互联网金融
互联网科技会
中资互联网科技
世界互联网领先科技成果
极限挑战互联网科技
广州互联网络科技有限公司
科技创新互联网企业
掌上梦互联网科技
互联网科技论坛
太原新华互联网科技学校怎么样
农村开互联网科技讲堂
贵州叶脉互联网科技有限公司所属行业
上海宁丞科技互联网
亳州好赞互联网科技有限公司
银川新华互联网科技学校是国营吗
上海睿民互联网科技有限公司
今日互联网科技
金融科技创新监管互联网金融
天津摩尔互联网科技
天津腾达互联网科技有限公司
东营紫格互联网科技
万物互联网智能科技
艺电能源互联网科技有限公司招聘
数字互联网科技有限公司
每日互联网科技新闻