Objective-C swizzled方法未接收参数



我正在开发一个需要执行一些swizzling的应用程序。我正在用我提供的另一个方法冲洗一个方法-(void)m1:(CMAcceleration)a;

-(void)newM(id self, SEL _cmd, ...){
va_list args;
va_start(args, _cmd);
//...
NSInteger returnValue=((NSInteger(*)(id,SEL,...))origImp)(self,_cmd,args);
va_end(args);
}

为了冲洗它,我使用:

origImp=method_setImplementation(method, newImp);

然后我像[ClassInstance m1:a];一样正常地称它问题是,当我期望像这里描述的{name=type...}这样的结构时,args似乎充满了垃圾。在完成NSLog之类的操作后,我需要将参数传递给原始实现。

在互联网上搜索,这似乎是一个模拟器的问题,但我不确定,我没有访问设备来确认这一点。

我是做错了什么,还是有办法解决这个问题?

你做得很不对。

方法签名应匹配,即-(void)newM:(CMAcceleration)a;

Method method = class_getInstanceMethod([SomeClass class],@selector(newM:));
IMP newImp = method_getImplementation(method);
origImp=method_setImplementation(method, newImp);

另一种方法是使C函数

void newM(id self, SEL _cmd, CMAcceleration a) {
}
origImp=method_setImplementation(method, (IMP)newM);

相关内容

  • 没有找到相关文章

最新更新