如何使用可变数量的参数调用实现?

iSo*_*Tom 6 objective-c objective-c-runtime

为了简化,假设我有这样的功能

void myFunc(id _self, SEL _cmd, id first, ...)
{

}
Run Code Online (Sandbox Code Playgroud)

在那个方法中,我想在_self的超类上调用实现(imp).我可以使用以下代码访问IMP:

Class class = object_getClass(_self);
Class superclass = class_getSuperClass(class);
IMP superimp = class_getMethodImplementation(superclass, _cmd);
Run Code Online (Sandbox Code Playgroud)

现在,我怎么能打电话给那个imp?

Ric*_*III 3

只需使用变量参数调用它:

superImp(self, _cmd, argument1, argument2, argument3, etc...)
Run Code Online (Sandbox Code Playgroud)

IMP 已经被typedef设置为

typedef id (*IMP)(id, SEL, ...);
Run Code Online (Sandbox Code Playgroud)

因此,您可以使用变量参数调用它,没有任何问题。