尝试通过 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”信号异常退出。如果设备在加载文件时处理了峰值内存使用情况,则内存会恢复正常,如果不是 - 它会崩溃。