使用JSPatch修復了WKWebView的一個代理方法
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation;
結(jié)果webView就內(nèi)存泄漏了,退出了VC之后仍然得不到釋放盯荤,會造成例如退出控制器苇倡,網(wǎng)頁音樂仍然不會停止的現(xiàn)象。經(jīng)過多次試驗集畅,證實是JSPatch修復造成的。
應該是js持有了webView對象缅糟,而我們不能控制js的垃圾回收挺智,可以參考以下issue:
https://github.com/bang590/JSPatch/issues/69
注意bang大神有個回答,是執(zhí)行一段js代碼來觸發(fā)js垃圾回收的:
(function(){
var x = {};
for(var i = 0;i<10000;i++){
x[i]=[];
};
x=null;
})();
不過我發(fā)現(xiàn)這個數(shù)量級窗宦,還是不夠快赦颇,所以循環(huán)數(shù)我改成了
i<999999999;
可以在瀏覽器VC的dealloc方法上調(diào)用一次赴涵,來觸發(fā)webView被釋放媒怯,我這里還是用JSPatch進行修復:
defineClass('WebVC', {
webView_didFinishNavigation: function(webView, navigation) {
//...
},
dealloc: function() {
var js = "(function(){var x = {};for(var i = 0;i<999999999;i++){x[i]=[];};x=null;})();";
self.webView().evaluateJavaScript_completionHandler(js, block('id,NSError*', function(obj, error) {
}));
},
});
還是有缺陷,就是其實也不能立刻被回收髓窜,總要過個幾秒扇苞。