我可以拦截 Objective-C 中的方法调用吗?怎么办?
编辑: Mark Powell 的回答给了我一个部分解决方案,-forwardInvocation 方法。 但是文档指出 -forwardInvocation 仅在向对象发送消息但没有相应方法时调用。我希望在任何情况下都能调用一个方法,即使接收者确实有那个选择器也是如此。
最佳答案
您可以通过调配方法调用来实现。假设你想获取 NSTableView 的所有版本:
static IMP gOriginalRelease = nil;
static void newNSTableViewRelease(id self, SEL releaseSelector, ...) {
NSLog(@"Release called on an NSTableView");
gOriginalRelease(self, releaseSelector);
}
//Then somewhere do this:
gOriginalRelease = class_replaceMethod([NSTableView class], @selector(release), newNSTableViewRelease, "v@:");
您可以在 Objective C 运行时中获得更多详细信息 documentation .
关于objective-c - 在 Objective-C 中拦截方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1618474/