2012-02-15 14 views
2

私は1つのインスタンスを作成したwebviewcontrollerを持っています。要求を変更して、テーブルビューでどの行が選択されているかに基づいてWebviewを表示します。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]; 

} 

私の問題は、これらのいくつかを読み込んだ後、メモリの警告とクラッシュが発生することです。

他のタブでは、タブが読み込まれたときにGoogleマップを読み込むwebviewもあります。これは、アプリケーションが読み込まれるとすぐにクラッシュします。

私はそれぞれのインスタンスを1つしか作成していないので、なぜこの問題が起こっているのか分かりません。以前は毎回新しいwebviewcontrollerを作成してリリースしましたが、同じ問題がありました。ここで

は、Googleマップをロードするためのコードです:

@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

[OK]を、私は他のタブで、ちょうど1つのUIWebViewは、Googleマップを読み込むだけでテーブルビューを忘れている。私はUITabbarControllerベースのアプリケーションを使用しているので、私はUINavigationControllerを使用しませんでした。 – Michael

+0

あなたは現在よりも多くのコードを表示する必要があります。問題を引き起こす可能性のあるコード内に何かが起こっている可能性があります。インストゥルメンテーションやその他の診断ツールを使用してコードを分析し、問題点を特定するのに役立ちます。 xcodeのビルドと分析ツールをチェックしてください。 –

+1

@マイケル、私はあなたの他のタブを見ることができません、なぜそこにトラブルがあると言うことはできません。注 - UINavigationControllerは、他のUIViewControllerとしてUITabbarControllerで使用できます。 – beryllium