我希望在我的 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/