void MyHookMessageEx(Class aClass ,SEL oldSEL ,IMP imp1 ,IMP* imp2)
{
Method oldMethod = class_getInstanceMethod(aClass, oldSEL);
*imp2 = method_getImplementation(oldMethod);
method_setImplementation(oldMethod, imp1);
}
为什么这样写的不起作用呢
那么完整代码呢
这个才是正确的姿势,看好了!!!
NSString *(*oldDescription)(id self, SEL _cmd);
// implicit self and _cmd are explicit with IMP ABI
NSString *newDescription(id self, SEL _cmd) {
NSString *description = (*oldDescription)(self, _cmd);
description = [description stringByAppendingString:@"!"];
return description;
}
MSHookMessageEx(
[NSObject class], @selector(description),
&newDescription, &oldDescription
);
不是怎么调用 而是它内部是怎么实现的