ios - 拦截所有 objective c 方法调用

标签 ios objective-c selector objective-c-runtime dispatch

我希望在我的 iOS 应用程序调用方法时插入 Hook 。所以假设有一个选择器 X,我希望在方法执行之前记录“方法 X 开始”,然后在执行后记录“方法 X 结束”。我知道一种方法,我可以将 sel X 的实现与在调用“自身”之前和之后具有 Hook 的方法混合,以便在该方法执行时通知我。但是,这只有在我事先知道方法的情况下才有效。我希望为所有执行的方法插入 Hook ,即使我无权访问执行它的类的源代码(例如,第三方封闭库执行内部方法)。这背后的目的是记录在我的应用程序中执行每个方法所花费的时间。我知道我不能覆盖 objc 消息发送方法调用来拦截方法。 NSObject 是否有一些函数在方法执行之前和之后被调用?

最佳答案

听起来您真正想要的是在 Instruments 的“Time Profiler”工具中运行您的应用程序。这将为您记录所有方法调用,并向您显示哪些方法在您的应用中花费的时间最多。

要回答您最初的问题,您实际上不必提前知道这些方法;您可以只使用 class_copyMethodList() 来获取方法列表,然后遍历它们。不过,我不鼓励实际走这条路,因为 Instruments 是处理这类事情的更好工具。

关于ios - 拦截所有 objective c 方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45694335/

相关文章:

android - 有效的 XML 文件在 Android ADT 中给出 "failed to parse"错误

java - RoboVM 错误 - dyld : Library not loaded

ios - 游戏设计+快速协调跨场景功能

objective-c - 影响保留计数的因素

iphone - 创建一个随机事实应用程序

javascript - 找不到固定标题表的选择器

php - 您如何访问简单的 DOM 选择器?

ios - 在 mapbox View 上显示数千个标签时,有没有办法提高性能?

ios - XCode 中需要的基本 Plist 帮助

ios - UIAlertViewStyleLoginAndPasswordInput 占位符文本不会设置