2010-08-27 74 views
10

我有使用UIWebViews的問題,我在這裏看到同樣的問題,但沒有有用的答案。問題在這裏:UIWebView memory management。我會引用它:uiwebview和巨大的內存損失

我正在開發一個大量使用UIWebView的應用程序。這個應用程序從我的服務器加載內容時動態生成大量的UIWebViews。其中一些UIWebView非常大,並且有很多圖片。

如果我使用儀器檢測泄漏,我沒有發現任何泄漏。然而,許多對象被分配,我懷疑這與UIWebViews有關。

由於不再需要webviews版本,因此似乎並非所有內存都已發佈。我的意思是,在向我的服務器發送請求之後,應用程序創建了一個UITableView和許多webviews(樂器約8Mb)。當用戶點擊後,所有這些都釋放,但內存使用量只減少約2-3 Mb,並在使用應用程序5-10分鐘後崩潰。

我已經創建了簡單的測試應用程序,並具有相同的結果。

這是一個的tableView,我是這樣創造的DetailsView:

DetailsVC *detailViewController = [[DetailsVC alloc] initWithNibName:@"DetailsVC" bundle:nil]; 
detailViewController.n = indexPath.row; 
[self.navigationController pushViewController:detailViewController animated:YES]; 
[detailViewController release]; 

在DetailsVC我在IB創建網頁視圖。我加載HTML這樣的:

NSString *urlAddress; 
if (self.n == 0) 
{ 
    urlAddress = @"http://www.google.com"; 
} 
else 
{ 
    urlAddress = @"http://www.yahoo.com"; 
} 

NSURL *url = [NSURL URLWithString:urlAddress]; 

NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; 

[self.webView loadRequest:requestObj]; 

我也做:

- (void)viewDidUnload { 
self.webView = nil; 
} 

就是這樣,每次我選擇的任何webView的時間RootViewController的我失去的內存2-3 MB,是否有解決方案對這個問題?

謝謝。

+0

它似乎是非常古老和衆所周知的問題,人們從2008年就遇到它並且仍然沒有解決方法((((http://discussions.info.apple.com/thread.jspa?threadID=1729697 – Burjua 2010-08-27 10:28:41

+0

好的,我發現了一個想法,該如何解決這個問題,在這裏描述:http://www.iphonedevsdk.com/forum/iphone-sdk-development/34840-uiwebview-memory-crash-caching-memory-useage.html。這不是一個問題的解決方案,而是一種破解,我不能相信它是唯一的方法來做到這一點,任何其他想法?謝謝 – Burjua 2010-08-27 11:44:52

+0

可能重複[是否UIWebView泄漏內存?](http:// stackoverflow.com/questions/648396/does-uiwebview-leak-memory) – 2010-08-27 15:20:02

回答

0

我想你既然設置了webview = nil,你就失去了釋放它的機會。

+0

)我嘗試了它,沒有它,它實際上沒有關係,它正在釋放,但不僅如此,但不僅如此,釋放內存的一部分 – Burjua 2010-08-31 09:44:36

+1

將retain屬性設置爲零也釋放以前的值。 – 2011-11-14 09:45:36

3

只是檢查以下 1.是你讓web視圖物業刪除 2,放入didFinishLaunchingWithOptions將下面的代碼Appdelegate

NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil]; 
    [NSURLCache setSharedURLCache:sharedCache]; 
    [sharedCache release]; 

我認爲,這段問題解決

+0

好的,謝謝,我會試試 – Burjua 2010-09-21 17:11:08

+1

不,不幸的是這並沒有幫助:(( – Burjua 2010-09-27 11:04:49

0

我知道這個線程有點老,但只是一個想法,並添加更少的相關位,我想添加這些提示,以便未來的訪問者也可以看看這個,以及可能解決問題。

  • 你應該set Cache policyNSURLRequest對象,並檢查該忽略緩存數據,請參見documentation政策。

  • 既然你已經release在你的代碼)的呼叫我假設你正在使用ARC,爲什麼你不viewDidUnload調用[super dealloc](?

  • 看看這個線程如何cleanForDealloc使用UIWebView。

  • 它是一個UITableViewController嗎?用自定義單元格?嘗試釋放(release,removeFromSuperView,設置爲零)。

希望它有幫助!