我希望在我的iOS應用程序中調用方法時插入掛鉤。因此,假設有一個選擇器X,我希望在方法執行之前記錄「方法X開始」,然後在執行後記錄「方法X結束」。我知道一種方法,我可以在調用「自身」之前和之後調用sel X的實現,以便在方法執行時通知我。但是,如果我事先知道方法,這隻會起作用。我希望爲所有執行的方法插入鉤子,即使我沒有訪問執行它的類的源代碼(例如執行內部方法的第三方封閉庫)。這背後的意圖是記錄在我的應用程序中執行每種方法所需的時間。我知道我不能重載objc消息發送方法調用來攔截方法。 NSObject是否有一些在方法執行前後調用的函數?攔截所有客觀的c方法調用
0
A
回答
1
相信我你不想要這個。正如你認爲在更高的層次上調用函數並記錄開始和結束是好的,由於以下原因,它不會有任何好處:
1-函數將調用許多許多較低級別的函數: addSubview本身會單獨調用很多函數,它調用的函數也會調用其中的許多函數。您認爲您即將調用1個函數,但在這種情況下,此日誌將被觸發+20次。
2-記錄所有功能實際上是額外的代碼在你的情況。額外的代碼意味着應用程序的額外努力。你會做什麼基本上會顯着影響性能和電池使用情況。
3-蘋果可以確保它的核心功能受到嚴重優化,花費了大量的時間在他們身上,以確保他們在他們的最好(在某些版本的Xcode它們被更新爲好)
我的建議是記錄你的功能,如果你想達到一個特定的目標。但通常不建議記錄目標c。 PS:如果你想檢查每個功能的時間,有些工具會告訴你哪些功能正在進行什麼操作。
3
聽起來像你真正想要的是在樂器的「Time Profiler」工具中運行你的應用程序。這會記錄所有的方法調用,並顯示哪些應用程序在您的應用程序中花費的時間最長。
要回答你原來的問題,你實際上並不需要提前知道方法;您可以使用class_copyMethodList()來獲取方法列表,然後遍歷它們。儘管如此,我仍然不鼓勵實際採用這種方式,因爲樂器是這類產品的更好工具。
相關問題
- 1. 攔截Groovy中所有元類的所有方法調用
- 2. 攔截方法調用Objective-C
- 3. C#4攔截方法調用
- 4. .NET方法調用攔截
- 5. Python攔截方法調用
- 6. 有攔截在客戶方
- 7. 攔截基類的所有子方法
- 8. Powermockito:攔截所有靜態方法
- 9. servicemix中所有調用的攔截器
- 10. C#AOP方法子方法調用的攔截?
- 11. 不使用攔截器綁定調用攔截器方法
- 12. 攔截調用定義的PHP方法
- 13. Python中的攔截方法調用
- 14. 攔截PHP中的方法調用
- 15. 客觀c幫助 - 調用方法?
- 16. 嵌套方法調用客觀c
- 17. 攔截器方法未被調用
- 18. 如何攔截實例方法調用?
- 19. 跟蹤/攔截方法調用
- 20. 統一攔截調用基本方法
- 21. 如何「攔截」測試方法調用?
- 22. 如何攔截dll方法調用?
- 23. 攔截每個http調用ES6方法
- 24. 如何從c方法調用客觀c方法iOS
- 25. 攔截調用屬性的get方法在C#
- 26. 如何攔截C#中的靜態方法調用
- 27. 通用方法攔截
- 28. 如何攔截所有ASP.NET WebApi控制器操作方法調用與Ninject攔截記錄?
- 29. 如何攔截對WCF .svc服務中的方法的所有調用?
- 30. 攔截C++方法調用(燕尾服,tpcall)
儀器有一個可能有用的時間分析儀器。 – Bamsworld