在我们系统的其他地方寻找内存泄漏,我创建了一个带有元刷新标签的20 MB网页.我们的想法是通过我们的数据路径代码移动大量数据以确认内存稳定性.
<html>
<meta http-equiv="refresh" content="1">
<body>
<div style="border: 1px solid red">
Content loading
</div><!-- 20mb worth of comments -->
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我发现的是uiwebview显示元刷新页面非常非常快地泄漏内存.即使我们的代码没有播放,应用程序内存也会在大约2分钟内达到300mb并且会在低内存警告上被拍摄.
我已停止刷新加载并尝试取消分享webview.
我试过loadurl:"about:blank",loadhtml:"",javascript文档关闭.
我还尝试编写一个递归的removeFromSuperview和removeFromParentViewController,读取webview中的私有scrollview是一个内存问题,但该内存永远不会被释放.当我们完成它时,我似乎无法找到一种可靠的方法来关闭,取消一个webview.
我们在网页浏览速度缓慢的情况下生活了很长一段时间,并且确实希望找到一种方法来确保在完成后可以完全清理webview.我们最近将应用程序转换为ARC,但没有改变内存速率.
我正在考虑通过webview中的所有对象尝试递归循环,看看它们是否可以被释放.仪器显示20 mb的cfdatas,alive,每次刷新20MB页面,但不会将它们显示为泄漏.如果我只提供响应头并完成urlprotocol客户端我们运行稳定,所以ale确认其余数据路径中的memleaks,但这是一个如此戏剧性的测试用例结果我希望找到一个webview内存泄漏解决方案一次并为所有人.
有没有人有更好的想法,或者有没有人尝试通过uiwebview中的对象进行递归?
我已经尝试了所有这些(一,二,三,四)解决方案,但是当我从Web视图屏幕返回到之前的viewController后,它会冻结大约2秒钟(有时更多).viewWillAppear中没有任何内容会导致冻结.
这是viewWillDisappearweb视图控制器:
-(void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[detailWebView stopLoading];
detailWebView.delegate = nil;
NSLog(@"viewWillDisappear called !!!");
}
Run Code Online (Sandbox Code Playgroud)
第一个viewController:
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.navigationController.navigationBar setBarTintColor:[UIColor colorWithRed:41.0/255.0 green:151.0/255.0 blue:132.0/255.0 alpha:1.0]];
UIImage *imagePlus = [[UIImage imageNamed:@"create.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
buttonCreate = [UIButton buttonWithType:UIButtonTypeCustom];
[buttonCreate setImage:imagePlus forState:UIControlStateNormal];
[buttonCreate addTarget:self action:@selector(createActivity:) forControlEvents:UIControlEventTouchUpInside];
buttonCreate.frame = CGRectMake(self.view.frame.size.width - 40, 10, 16, 16);
[self.navigationController.navigationBar addSubview:buttonCreate];
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"back", nil) style:UIBarButtonItemStylePlain target:nil action:nil];
[backButton setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor blackColor]} forState:UIControlStateNormal];
self.navigationItem.backBarButtonItem …Run Code Online (Sandbox Code Playgroud)