2012-02-10 14 views
0

今日私はいくつかのテストを行いましたが、私は結果が不思議です。私はUINavigationControllerと2つのUIViewControllerを持つアプリケーション(ARC)を作った。最初のビューにはボタンがあり、ボタンを押すと2番目のビューがロードされます。第2のビューでは、シェイクジェスチャが検出されたときに第1のビューがロードされ、以下同様である。私が計測器で気づくのは、ビューがロードされるたびにヒープが大きくなることです。ここではそれがなぜ起こるかヒープメモリが増えています

self.navigationController = [[UINavigationController alloc]init]; 
self.window setRootViewController:self.navigationController]; 
FirstViewController *firstview = [FirstViewController alloc]init]; 
[self.navigationController pushViewController:FirstViewController animated:YES]; 

FirstViewController.m

-(IBAction)loadSecondView 
{ 
    SecondViewController *secondview = [SecondViewController alloc]init]; 
    [self.navigationController pushViewController:secondview animated:YES]; 
} 

SecondViewController.mが

-(IBAction)loadFirstView 
{ 
    FirstViewController *firstview = [FirstViewController alloc]init]; 
    [self.navigationController pushViewController:first view animated:YES]; 
} 

私が把握することはできませんいくつかのコード

AppDelegate.mです。どのようにその場合に成長のヒープを避けるために?第二のコントローラは、最初に開いた場合

+0

2番目のviewControllerには、それをタップすると自動的に動作する戻るボタンがありますので、FirstFirstViewの新しいインスタンスを作成するたびにloadFirstViewメソッドを実装する必要はありません。そのため、毎回メモリヒープが増えています。 –

+0

私はそのボタンを望んでいません。シェイクジェスチャーが検出されたら、私は仕事をしたいです。 – objlv

+0

on shake:[self.navigationController popViewControllerAnimated:YES]; – NeverBe

答えて

1

実際には、新しいビューコントローラオブジェクトを作成するたびに..それはしないでください。

新しいオブジェクトを割り当ててそのビューをプッシュするたびに、そのオブジェクトがナビゲーションスタックに追加されるため、メモリが増加します。

代わりに、最初のビューでボタンをタップすると、現在のビューコントローラをポップアップして、AppDelegateクラスに2番目のビューを表示するよう通知できます。

同様に、2番目のビューでは、最初のビューを表示する場合は、現在のビューをポップし、AppDelegateクラスに最初のビューコントローラをプッシュするように通知します。

+0

私は簡単な例を教えてもらえますか? – objlv

0
SecondViewController *secondview = [[[SecondViewController alloc]init] autorelease]; 

FirstViewController *firstview = [[[FirstViewController alloc]init] autorelease]; 

あなたはpopViewControllerを行う必要があり、

を(ないARC用)viewcontrollersを自動解放する必要があります。あなたが戻って戻ってきなければ、ヒープは成長する

関連する問題