2012-02-15 70 views
2

我有一個webviewcontroller,其創建的一個實例,然後我改變請求,並示出了基於在tableview中選擇哪個行上的網頁視圖。記憶問題UIWebViews中

// Replace tableView:didSelectRowAtIndexPath with the following 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath 
{ 

CGRect rect = self.view.frame; 
CGFloat width = [UIScreen mainScreen].bounds.size.width; 
CGFloat height = [UIScreen mainScreen].bounds.size.height; 
rect.size.width = width; //self.view.frame.size.width; 
rect.size.height = height; //self.view.frame.size.height; 
RSSEntry *entry = [_allEntries objectAtIndex:indexPath.row]; 

page = [[WebViewController alloc] initWithUrl:entry.articleUrl]; 
page.view.frame = rect; 
[self.view addSubview:page.view]; 

} 

我的問題是,加載其中的幾個之後,我得到內存警告和崩潰。

在另一個選項卡中,我也有一個web視圖,它在加載選項卡時加載谷歌地圖。它幾乎一載入就崩潰了應用程序。

由於我只做了每個實例,我不明白爲什麼會出現這個問題。以前我每次創建一個新的webviewcontroller,然後發佈它,但是我遇到了同樣的問題。

這裏是加載谷歌地圖代碼:

@interface MapViewController : UIViewController { 
    IBOutlet UIWebView *mapPage; 
} 

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad { 
url_string = @"http://maps.google.fr/maps/ms?msa=0&msid=213119412551786463007.0004b3fb7f4c123377402&z=12"; 
url = [NSURL URLWithString:url_string]; 
request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url_string]]; 
[request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData]; 
mapPage.scalesPageToFit = YES; 
mapPage.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight); 
[mapPage loadRequest:request]; 
[super viewDidLoad]; 
} 

的一個UIWebView在界面生成器創建的。

它運行的內存和崩潰的地圖,只要你嘗試與地圖交互加載完成之後,或。它看起來與上面的問題非常相似,但這次沒有選項卡,或者沒有更改UIWebView使用的請求。

回答

2

事實證明頁面被緩存。

在我的應用程序的applicationDidReceiveMemoryWarning方法,我添加了一行來清除緩存。這固定我的p

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application { 
/* 
Free up as much memory as possible by purging cached data objects that can be recreated (or reloaded from disk) later. 
*/ 
[[NSURLCache sharedURLCache] removeAllCachedResponses]; 
} 
2

在您選擇的UITableView創建WebViewController的一個新對象,並添加視圖(出於某種原因?),以電流控制器的看法行每次。我不確定你是否至少從超級視圖中刪除了這個視圖(你也必須釋放WebViewController)。當然,這需要越來越多的記憶。

什麼是創建一個完整的UIViewController並將其用作子視圖的原因?爲什麼你沒有使用UINavigationController?

+0

好吧,忘記表視圖的片刻,它也發生在我的另一個選項卡上,其中只有1個UIWebView加載谷歌地圖。我沒有使用UINavigationController,因爲我正在使用基於UITabbarController的應用程序。 – Michael 2012-02-15 08:49:18

+0

您必須展示比當前更多的代碼 - 可能會在代碼中發生任何可能導致問題的事情。閱讀使用儀器和其他診斷工具分析您的代碼並幫助指出問題。查看xcode中的構建和分析工具。 – 2012-02-15 09:24:36

+1

@邁克爾,我看不到你的其他標籤,不能說你爲什麼有麻煩。注意 - UINavigationController可以在UITabbarController中作爲任何其他UIViewController使用。 – beryllium 2012-02-15 09:39:46