2012-09-19 59 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