File tree 1 file changed +17
-17
lines changed
1 file changed +17
-17
lines changed Original file line number Diff line number Diff line change 24
24
页面渲染的监控,这个需求看似很简单,但是在实际开发的过程中还是会遇到不少问题。比较容易想到的是通过 hook 页面的几个关键的生命周期方法,例如 ` viewDidLoad ` 、` viewDidAppear: ` 等,从而计算出页面渲染时间,最终发现慢加载的页面。然而如果真正通过上述思路去着手实现的时候,便会遇到难题。在 APM SDK 中如何才能 hook 应用所有页面的生命周期的方法呢?如果尝试 hook ` UIViewController ` 的方法又会如何呢?hook ` UIViewController ` 的方法明显不可行,原因是他只会作用 ` UIViewController ` 的方法,而应用中大部分的视图控制器都是继承自 ` UIViewController ` 的,所以这种方法不可行。但是听云 SDK 却能够实现。页面 Hook 的逻辑主要是 ` _priv_NBSUIAgent ` 类中实现的,下面是 ` _priv_NBSUIAgent ` 类的定义,其中 ` hook_viewDidLoad ` 等几个方法便是线索。
25
25
26
26
```
27
- ; @class _priv_NBSUIAgent : NSObject {
28
- ; +hookUIImage
29
- ; +hookNSManagedObjectContext
30
- ; +hookNSJSONSerialization
31
- ; +hookNSData
32
- ; +hookNSArray
33
- ; +hookNSDictionary
34
- ; +hook_viewDidLoad:
35
- ; +hook_viewWillAppear:
36
- ; +hook_viewDidAppear:
37
- ; +hook_viewWillLayoutSubviews:
38
- ; +hook_viewDidLayoutSubviews:
39
- ; +nbs_jump_initialize:
40
- ; +hookSubOfController
41
- ; +hookFMDB
42
- ; +start
43
- ; }
27
+ @class _priv_NBSUIAgent : NSObject {
28
+ +hookUIImage
29
+ +hookNSManagedObjectContext
30
+ +hookNSJSONSerialization
31
+ +hookNSData
32
+ +hookNSArray
33
+ +hookNSDictionary
34
+ +hook_viewDidLoad:
35
+ +hook_viewWillAppear:
36
+ +hook_viewDidAppear:
37
+ +hook_viewWillLayoutSubviews:
38
+ +hook_viewDidLayoutSubviews:
39
+ +nbs_jump_initialize:
40
+ +hookSubOfController
41
+ +hookFMDB
42
+ +start
43
+ }
44
44
```
45
45
46
46
我们先将目光转到另外一个更可疑的方法:` hookSubOfController ` ,具体实现如下:
You can’t perform that action at this time.
0 commit comments