如何使用以下代码调用之前保存的方法:
SEL sel = @selector(someMethod:param:);
Method myMethod = class_getInstanceMethod([SomeClass class], sel);
正如您可能想象的那样,调用[SomeClass someMethod]
是行不通的,因为稍后我会调整原始方法。
答案 0 :(得分:2)
您需要将指针强制转换为正确的函数类型,请记住方法有两个隐式参数self和_cmd。来自Apple的runtime docs:
void (*setter)(id, SEL, BOOL);
int i;
setter = (void (*)(id, SEL, BOOL))[target methodForSelector:@selector(setFilled:)];
for ( i = 0; i < 1000, i++ )
setter(targetList[i], @selector(setFilled:), YES);
(修改强>)
请记住,Method类型是一个结构体,而在ObjC2运行时,它是不透明的,因此您无法直接访问其成员 - 您需要使用method_getImplementation(myMethod)
来获取IMP你可以像上面那样进行类型转换。