首页 > 移动平台 > 详细

IOS objc_msgSend 32位和64位

时间:2017-12-21 16:52:10      阅读:223      评论:0      收藏:0      [点我收藏+]

objc_msgSend(obj,normalSelector,command) 只支持32位如果在64位可能出现类的赋值出错 如:

假如 obj 是CDVPlugin类 normalSelector 是一个方法选择器(即@selector(方法名))该方法的参数是 command(CDVInvokedUrlCommand类)

在32位上面执行后成功把command的原属性传递过去了,但是在64位会发现command的class变为了CDVPlugin(我项目上实际发生并测出来的

修改方法:     

变为: ((void(*)(id,SEL,id))objc_msgSend)(obj,normalSelector,command);

苹果官方推荐:

- (int) doSomething:(int) x { ... }
- (void) doSomethingElse {
    int (*action)(id, SEL, int) = (int (*)(id, SEL, int)) objc_msgSend;
    action(self, @selector(doSomething:), 0);
}

可以简写为: ((int(*)(id,SEL,int)))objc_msgSend)(self,@selector(doSomething:),0);

 亲测有效

 



IOS objc_msgSend 32位和64位

原文:http://www.cnblogs.com/yfning/p/8081163.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!