試圖加載經由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:無];)
我在儀器看到了什麼:
沒有任何人有什麼想法? 謝謝。
編輯:我在Safari,Chrome,Mercury瀏覽器上測試了一些大的.RTF文件(700 Kb - 2.4 Mb)。同樣的事情無處不在,模擬器和設備。我想這是WebKit中的一些錯誤。
一般情況:瀏覽器使用太多內存來處理這類文件。在90%的情況下,只是以「崩潰」或「低內存」信號異常退出。如果設備在加載文件時處理峯值內存使用情況,則內存將恢復正常,否則將崩潰。
那不是_technically_泄漏 - 它只是大量的內存被使用。靜態分析儀是否提供任何提示/線索?這是在真實的設備上還是在模擬器上? (模擬器有時會給出奇怪的結果,因爲它使用了不同的內存模型,它是一個模擬器,而不是模擬器!) – deanWombourne
是的,在模擬器上發生的事情幾乎相同。 (但應用程序不會崩潰,在250-300 MB的活動字節上達到一些峯值,而不是釋放所有的,恢復正常。) 靜態分析器在這個問題上並沒有給我任何提示。 – krafter
我的意思是我一直在使用真實的設備。 – krafter