2

尝试通过 webView 加载 .rtf 文件(2.4 MB),如下所示:

 NSURL *docURL = [NSURL fileURLWithPath:docPath];
NSData *data = [NSData dataWithContentsOfURL:docURL];
NSString *mimeType = //receiving proper mime type here
[webView loadData:data MIMEType:mimeType textEncodingName:@"utf-8" baseURL:docURL];

加载此类文件会导致内存增长,直到应用程序崩溃。根据 Instruments,即使在完全释放包含控制器和 webView 本身的 webView 之后,内存也会继续增长。在应用程序的其他位置,使用其他应用程序功能,内存会增长,就好像我仍在继续浏览该 .RTF 文件一样。

当关闭/关闭控制器时,我也会做所有事情来释放 WebView。即:mainWebview.delegate = nil; [mainWebview 停止加载]; , [mainWebview removeFromSuperview]; , [mainWebview 发布]; . (甚至尝试执行以下操作: [mainWebview loadHTMLString:@"" baseURL:nil]; )

我在仪器中看到的: 在此处输入图像描述

有人有什么想法吗?谢谢。

编辑:我在 Safari、Chrome、Mercury 浏览器上测试了一些大型 .RTF 文件(700 Kb - 2.4 Mb)。同样的事情在任何地方都会发生,无论是模拟器还是设备。我猜这是WebKit中的一些错误。

一般情况:浏览器使用太多内存来处理这类文件。在 90% 的情况下,只是以“Crash”或“Low Memory”信号异常退出。如果设备在加载文件时处理了峰值内存使用情况,则内存会恢复正常,如果不是 - 它会崩溃。

4

1 回答 1

1

在使用UIWebView. 就我而言,我发现行为发生了很大变化,具体取决于我将数据加载到 Web 视图中的方式。在你的情况下,我没有解决方案,但根据我的经验,也许使用:

NSURLRequest *req = [NSURLRequest requestWithURL:urlToYourRTFFile];
[webView loadRequest:req];

可以有所作为

于 2012-09-19T11:59:23.230 回答