【发布时间】:2012-02-18 14:28:53
【问题描述】:
我正在寻找一种简单、廉价、可靠的解决方案来拦截使用 Objective-c 2.0 的方法调用。应该可以执行 pre / post 块并在其间运行原始方法。
我知道我可以调配方法 - 用可以调用原始方法并允许我执行前/后块的东西替换 IMP。这看起来很简单,速度非常快,并且应该在标准情况下工作。知道是否有更好的运行时魔术方法来解决这个问题吗?
PS 可移植性无关紧要 - 它只能在 OS X 和 iOS 上与苹果运行时一起运行。
【问题讨论】:
-
您提出了一个建议的解决方案,而不是实际的问题。你想解决什么问题?
-
它不是关于特定问题 - 更多关于解决将前/后代码添加到现有方法的一般情况。我经常用它来检查参数、ret-vals、跟踪实例、记录一些东西等。我只是不确定什么是最好的方法。
-
一个通用的替代方法是挂钩
objc_msgSend函数。一个挂钩它的例子是here。 _builtin* 在 clang 下不可用,所以你必须在那里进行一些调整
标签: objective-c ios macos