iOS 添加WKWebView导致控制器无法释放的问题
2018-03-01 10:07
806 查看
在WkWebView与JavaScript交互中,经常会在原生中注入MessageHandler,app中注入MessageHandler的方法
这里我们发现在向JS中注入handler的时候强引用了self,最终导致内存泄漏
解决方法 添加一个新类 WeakScriptMessageDelegate
使用 添加了下面这行代码之后ViewController就会调用dealloc方法,此时ViewController已经正常释放。但是WeakScriptMessageDelegate没有释放,需要在dealloc中将WeakScriptMessageDelegate释放掉。
释放WeakScriptMessageDelegate 在dealloc方法中实现
WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init]; config.userContentController = [WKUserContentController new]; //注入handler [config.userContentController addScriptMessageHandler:self name:@"HandlerName"];
这里我们发现在向JS中注入handler的时候强引用了self,最终导致内存泄漏
解决方法 添加一个新类 WeakScriptMessageDelegate
@interface WeakScriptMessageDelegate : NSObject<WKScriptMessageHandler> @property (nonatomic, weak) id<WKScriptMessageHandler> scriptDelegate; - (instancetype)initWithDelegate:(id<WKScriptMessageHandler>)scriptDelegate; @end @implementation WeakScriptMessageDelegate - (instancetype)initWithDelegate:(id<WKScriptMessageHandler>)scriptDelegate { self = [super init]; if (self) { _scriptDelegate = scriptDelegate; } return self; } - (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message { [self.scriptDelegate userContentController:userContentController didReceiveScriptMessage:message]; } @end
使用 添加了下面这行代码之后ViewController就会调用dealloc方法,此时ViewController已经正常释放。但是WeakScriptMessageDelegate没有释放,需要在dealloc中将WeakScriptMessageDelegate释放掉。
WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init]; config.userContentController = [WKUserContentController new]; //注入handler [config.userContentController addScriptMessageHandler:[[WeakScriptMessageDelegate alloc] initWithDelegate:self] name:@"HandlerName"];
释放WeakScriptMessageDelegate 在dealloc方法中实现
[self.webView.configuration.userContentController removeScriptMessageHandlerForName:@"HandlerName"];
相关文章推荐
- 因WKWebview导致视图控制器释放不掉而内存崩溃的问题
- 解决iOS开发中涉及到的retain cycle导致控制器无法释放的问题
- 【IOS】自定义View添加NSTimer导致不释放的问题
- iOS WKWebView无法处理URL Scheme和App Store链接的问题解决
- iOS WKWebView与JS交互及不能释放问题
- iOS 使用 WKWebView 无法截获上、下手势的问题解决
- iOS计算UIWebView的高度和iOS8之后的WKWebView的高度问题
- iOS计算UIWebView的高度和iOS8之后的WKWebView的高度问题
- iOS计算UIWebView的高度和iOS8之后的WKWebView的高度问题
- 解决 hybird 应用中重复获取 WebView,导致页面元素无法识别的问题
- 浅谈iOS中的WKWebView添加cookie
- 因IOS版本导致的模态视图控制器dismissModalViewControllerAnimated调用问题
- 解决 hybird 应用中重复获取 WebView,导致页面元素无法识别的问题
- IOS UICollectionView 添加Header无法正常显示问题解决
- iOS WKWebView添加进度条02
- 浅谈iOS中WKWebView和UIWebView的清除缓存问题
- iOS中给webView添加手势返回的问题
- IOS UIWebView转WKWebView中的js交互问题
- 处理ios webview 更新缓存本地css、js后webview缓存无法更新的问题
- 因WKWebview导致视图控制器释放不掉而内存崩溃的问题