函数调用的参数太少,至少应为2,值为0

时间:2019-03-06 03:37:31

标签: objective-c runtime

我编写了以下代码:

@interface TestClass : NSObject
//
-(void)testLog;
//
+(void)testLog;
@end
//===============================
SEL sel = @selector(testLog);
IMP imp = class_getMethodImplementation([TestClass class], sel);
imp();
//===============================
SEL testSel = @selector(testLog);
IMP testImp = class_getMethodImplementation(objc_getMetaClass(class_getName([TestClass class])), testSel);
testImp();

Too few arguments to function call, expected at least 2, have 0

我将Enable Strict Checking of objc_msgSend Calls设置为NO,但是仍然出现此错误。

Enable Strict Checking of objc_msgSend Calls

为什么错了?

1 个答案:

答案 0 :(得分:1)

所有方法都至少使用两个参数:正在调​​用该方法的对对象(或类,在类方法中为类)的引用,这是方法体内self的值;和方法的选择器。这就是您的通话中缺少的内容。

您可以在documentation中对IMP的定义中看到以下内容:

id (*IMP)(id, SEL, ...)

说明:

  

此数据类型是指向实现该方法的函数的开始的指针。此函数使用为当前CPU架构实现的标准C调用约定。第一个参数是指向self的指针(即,此类的特定实例的内存,或者对于类方法,是指向元类的指针)。第二个参数是方法选择器。方法参数如下。

HTH