我编写了以下代码:
@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();
我将Enable Strict Checking of objc_msgSend Calls
设置为NO,但是仍然出现此错误。
为什么错了?
答案 0 :(得分:1)
所有方法都至少使用两个参数:正在调用该方法的对对象(或类,在类方法中为类)的引用,这是方法体内self
的值;和方法的选择器。这就是您的通话中缺少的内容。
您可以在documentation中对IMP
的定义中看到以下内容:
id (*IMP)(id, SEL, ...)
说明:
此数据类型是指向实现该方法的函数的开始的指针。此函数使用为当前CPU架构实现的标准C调用约定。第一个参数是指向self的指针(即,此类的特定实例的内存,或者对于类方法,是指向元类的指针)。第二个参数是方法选择器。方法参数如下。
HTH