2012-09-19 24 views
2

试图加载经由web视图一个.rtf文件(2.4 MB)是这样的:UIWebView在加载.RTF文件时泄漏内存?

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]; 

载入这些文件导致存储器生长直到应用程序崩溃。根据仪器内存的增长,即使完全重新分配包含控制器和webView本身的webView后,内存仍会继续增长。在应用程序的其他位置,使用其他应用程序功能时,内存会不断增长,就好像我仍在继续浏览该.RTF文件一样。

当关闭/解散控制器时,我也会尽全力解除分配WebView。 即:mainWebview.delegate = nil; [mainWebview stopLoading]; ,[mainWebview removeFromSuperview]; ,[mainWebview发布]; 。 (甚至试图做到以下几点:[mainWebview loadHTMLString:@ “” 基本URL:无];)

我在仪器看到了什么: enter image description here

没有任何人有什么想法? 谢谢。

编辑:我在Safari,Chrome,Mercury浏览器上测试了一些大的.RTF文件(700 Kb - 2.4 Mb)。同样的事情无处不在,模拟器和设备。我想这是WebKit中的一些错误。

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

+0

那不是_technically_泄漏 - 它只是大量的内存被使用。静态分析仪是否提供任何提示/线索?这是在真实的设备上还是在模拟器上? (模拟器有时会给出奇怪的结果,因为它使用了不同的内存模型,它是一个模拟器,而不是模拟器!) – deanWombourne

+0

是的,在模拟器上发生的事情几乎相同。 (但应用程序不会崩溃,在250-300 MB的活动字节上达到一些峰值,而不是释放所有的,恢复正常。) 静态分析器在这个问题上并没有给我任何提示。 – krafter

+0

我的意思是我一直在使用真实的设备。 – krafter

回答

1

我在使用UIWebView时也遇到了与内存管理有关的几个问题。 In my case,我看到行为改变了很多,这取决于我将数据加载到Web视图的方式。你的情况,我没有办法,但根据我的经验,也许用:

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

可以有所作为

+0

和loadRequest一样:不过谢谢你的回应。 – krafter