IOS objc_msgSend 32位和64位

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IOS objc_msgSend 32位和64位相关的知识,希望对你有一定的参考价值。

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位的主要内容,如果未能解决你的问题,请参考以下文章

苹果产品时间发布表统计(iPhoneiPad),以及32位和64位机的说明

32位和64位有啥区别 32位和64位区别都有哪些

电脑32位和64位有啥区别 电脑32位和64位的区别

navicat for mysql 64位和32位区别,win7 64位下用32位和64位有区别吗??

32位和64位系统的区别

64位和32位是啥?