我希望在我的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. C#4攔截方法調用
- 3. 攔截方法調用Objective-C
- 4. Python攔截方法調用
- 5. .NET方法調用攔截
- 6. 有攔截在客戶方
- 7. 攔截基類的所有子方法
- 8. Powermockito:攔截所有靜態方法
- 9. C#AOP方法子方法調用的攔截?
- 10. Python中的攔截方法調用
- 11. 攔截調用定義的PHP方法
- 12. 攔截PHP中的方法調用
- 13. 客觀c幫助 - 調用方法?
- 14. 如何攔截dll方法調用?
- 15. 如何「攔截」測試方法調用?
- 16. 統一攔截調用基本方法
- 17. 攔截每個http調用ES6方法
- 18. 如何從c方法調用客觀c方法iOS
- 19. 如何攔截C#中的靜態方法調用
- 20. 攔截調用屬性的get方法在C#
- 21. 如何攔截對WCF .svc服務中的方法的所有調用?
- 22. 攔截CDI bean中的私有方法
- 23. JUnit:攔截方法調用,然後調用不同的參數
- 24. Groovy MetaProgramming - 攔截所有的方法,甚至是丟失的
- 25. 攔截所有通知 - UWP
- 26. 攔截所有服務
- 27. 攔截javascript調用
- 28. 多重方法攔截和攔截器重用
- 29. 使用Unity攔截所有對IMyInterface.SomeMethod
- 30. 使用瀏覽器插件攔截所有API調用
儀器有一個可能有用的時間分析儀器。 – Bamsworld