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);
亲测有效