解决iOS11以下系统WKWebView崩溃

/ Mac / 没有评论 / 1416浏览

解决iOS11以下系统WKWebView崩溃

问题1描述:

老版代码WKWebView存在内存泄漏,控制器一直没有dealloc,导致每次访问都内存都在增加

问题原因

在WKWebView只有:addScriptMessageHandler 方法,没有添加移除方法,应该添加:removeScriptMessageHandlerForName的方法。问题解决

问题2描述

在添加完removeScriptMessageHandlerForName之后,控制器开始走dealloc方法了,但是在iOS11以下系统上crash.

问题解决思路:

  1. 看崩溃日志

1

这个崩溃日志没有关键信息,需要找到关键信息所以在main函数中添加了这样的代码,查看关键信息:

@try {
  @autoreleasepool
  {
    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
  }
}
@catch (NSException* exception)
{
  NSLog(@"Exception=%@\nStack Trace:%@", exception, [exception callStackSymbols]);
}

可以查看到信息是这样的:

2

根据日志分析可以看出来是因为:有一个observers在控制器dealloc的时间没有释放引起的。完美解决。