优化内存 iOS App:UIWebView、Google Maps SDK

Posted

技术标签:

【中文标题】优化内存 iOS App:UIWebView、Google Maps SDK【英文标题】:Optimize Memory iOS App: UIWebView, Google Maps SDK 【发布时间】:2015-03-10 18:13:32 【问题描述】:

我有一个 ios 应用,在 TabBarViewController 中有 3 个视图:

第一个是用于解析来自网站的 JSON 数据,并显示 1-3 张带有 textarea 的图片。二是接触视图; google maps SDK 与另一个文本区域。第三个视图是 webView,用于从网络摄像头(通过 html 文件导入)流式传输视频。

第一个视图需要 35.5MB 才能显示(带有一张图片)。 在我用 TabBarViewController 打开第二个视图后,我使用了 75MB 的内存(如果我回到第一个视图,它大约是 72Mb)。 最后,如果我转到第三个视图(webView),内存分配大约为 90MB,除非我正在观看来自网络摄像头的流式视频,当内存上升到大约 170MB 时。

我不知道这是否可以接受。

我正在使用 ARC,但我不在我的课程中使用 dealloc。使用 TabBarViewController 时可以使用 dealloc 吗?例如,我想在使用 TabBarViewController 更改视图时释放所有视图,因为我的内存分配永远不会减少。

网页查看代码:

-(void) viewDidLoad
    [super viewDidLoad];
    self.fileUrl = [[NSBundle bundleForClass:[self class]]URLForResource:@"myHTML" withExtension:@"html"];
    self.requestURL = [NSURLRequest requestWithURL:self.fileUrl];
    [_webView loadRequest:self.requestURL];


-(void) viewWillDisappear:(BOOL)animated
    [super viewWillDisappear:NO];
    _webView = nil;
    self.fileUrl = nil;
    self.requestURL = nil;
    [_webView stringByEvaluatingjavascriptFromString:@"document.body.innerHTML = \"\";"];

【问题讨论】:

【参考方案1】:

使用 WKWebView 代替 Webview 确实对记忆有好处!

其他提示? Google Maps SDK 占用太多内存!

【讨论】:

适用于 iOS 8,但我们很多人仍然需要支持 7 并且找不到解决方案【参考方案2】:

我建议您在使用 -viewWillDisappear 方法从网络摄像头网络视图转移后清除它。

【讨论】:

像这样:-(void) viewWillDisappear:(BOOL)animated [super viewWillDisappear:YES]; _webView = 无; ? 这似乎也能解决问题 [webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML = \"\";"]; 嗯,不是真的,我离开第三个视图后仍处于 160 个月:/ 用我的 Web 视图代码编辑;)

以上是关于优化内存 iOS App:UIWebView、Google Maps SDK的主要内容,如果未能解决你的问题,请参考以下文章

WKWebView

IOS 网络浅析-(十二 UIWebView简介)

Hybrid App: 对比UIWebView和WebKit实现JavaScript与Native交互

iOS H5 容器的一些探究:UIWebView 和 WKWebView 的比较和选择

iOS H5容器的一些探究:UIWebView和WKWebView的比较和选择

如何在 iOS 8 的 iOS App 中的 UIWebview 中执行 java 脚本?