objective-c - 在 Objective-C 中拦截方法调用

标签 objective-c methods intercept

我可以拦截 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/

相关文章:

iphone - 帮助解析嵌套的 JSON 对象

objective-c - 捕获所有 Wi-fi 网络并保存到列表中

c# - 如何获取用户输入以使用登录控制台应用程序的验证方法?

Groovy 中的动态方法调用

grails - 如何在将每个新请求提交给 grails 中的 Controller 之前执行函数

objective-c - 在哪里存储 iOS 应用程序的字符串

ios - 面向初学者的变量赋值和字符串数组 Obj-c (iOS)

javascript - 我如何使用一个 "if"来完成相同的工作?

linux - 将所有流量发送到网络接口(interface)并从其他接口(interface)接收

api - 如何拦截 node.js 快速请求