关于WKWebview KVO的问题

最近听云上监听到一个crash,内容如下:

An instance 0x11c9d7400 of class WKWebView was deallocated while
 key value observers were still registered with it. 
Current observation info: 
 
( 

看一下崩溃路径,就是用户进入webView,然后点击返回按钮返回,就直接crash掉了。

截屏2021-06-02 下午12.09.44.png

但是我看到相应的VC中只有两个kvo,一个title的,一个estimatedProgress,根本就没有一个load相关的。然后我又搜遍了所有的webview相关的,也没有发现有一个load的监听。

后来找到了一种方法,可以打印webView观察者相关的信息

            id info = self.webView.observationInfo;
            id info1 = [info valueForKey:@"_observances"];
            id info2 = [info1 valueForKey:@"_property"];
            id info3 = [info2 valueForKey:@"_keyPath"];
            NSLog(@"====== 0 %@",info);
            NSLog(@"====== 1 %@",info1);
            NSLog(@"====== 2 %@",info2);
            NSLog(@"====== 3 %@",info3);

打印出来结果如下:

2021-06-02 12:17:39.440592+0800 shansong[13307:3766327] ====== 0  (
 Context: 0x10b085000, Property: 0x281f09f20>
 Context: 0x0, Property: 0x281f0a160>
 Context: 0x105979f30, Property: 0x281f0a220>
)
2021-06-02 12:17:39.440724+0800 shansong[13307:3766327] ====== 1 (
    " Context: 0x10b085000, Property: 0x281f09f20>",
    " Context: 0x0, Property: 0x281f0a160>",
    " Context: 0x105979f30, Property: 0x281f0a220>"
)
2021-06-02 12:17:39.440858+0800 shansong[13307:3766327] ====== 2 (
    "",
    "",
    ""
)
2021-06-02 12:17:39.440908+0800 shansong[13307:3766327] ====== 3 (
    loading,
    title,
    estimatedProgress
)

然后发现这个loading的observer和我自己添加的两个不一样,于是查了下这个loading的class,

(lldb) p ((id)0x2807f01e0)->isa
(Class) $0 = NBSWKWebViewObserver

发现这个罪魁祸首,NBSWKWebViewObserver,NBS相关的就是听云的,后来我把项目的听云sdk删掉再运行就没有这个可恶的loading了。

后面,就是如何和听云相关的沟通了。

你可能感兴趣的:(关于WKWebview KVO的问题)