iOS中wkwebView内存泄漏与循环引用问题详解

2020-01-21 06:41:36王旭

前言

现在大多数网络也面加载都会用到wkwebview,之前在使用wkwebview的时候,网上很多的基础教程使用很多只是说了怎么添加Message Handler 但是并没有告诉到家有这个内存泄漏的风险,如果你只是也没内的数据调用你压根都不会发现这个问题。没存泄漏这个问题说大不大,说小不小,严重的话话直接到时app闪退,所以还是得重视起。好下面说一下怎么解决,话不多说了,来一起看看详细的介绍吧

解决方法

1,在做网页端js交互的时候 我们都会这样去添加js


[self.customWebView.configuration.userContentController addScriptMessageHandler:self name:obj];

后面也添加了 delloc


- (void)dealloc {
 [_customWebView removeObserver:self forKeyPath:@"estimatedProgress"];
 [self removeScriptMessageHandler];
}

后来发现在加载网页的时候 pop push 多次操作 内存一直在增加,高的时候 都快200上下了,才注意到这个内存问题,
刚开始的解决方法是:


- (void)viewWillDisappear:(BOOL)animated {
 [super viewWillDisappear:animated];
 
 [self removeScriptMessageHandler];
}

后来发现问题依旧存在 delloc 依旧不走,虽然走了移除方法 ,但是在当你在pop push时候 网页没有移除掉原先占的内存,后来发现


[userContentController addScriptMessageHandler:self name:GetKeyiOSAndroid_Action];

这里userContentController持有了self ,然后