码迷,mamicode.com
首页 > 移动开发 > 详细

IOS objc_msgSend 32位和64位

时间:2017-12-21 17:17:07      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:san   sele   参数   ...   url   end   normal   col   select   

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位

标签:san   sele   参数   ...   url   end   normal   col   select   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!