2011-06-23 12 views
0

私はインストゥルメントツールを使用しましたが、メモリリークはありません。しかし、私はその背後にある論理に苦労しています。なぜこれは漏れないでしょうか?私のAppDelegateは割り当てられたnavControllerを使ってself.navigationControllerのプロパティを設定しています。私のここでの初期化がなければ、私の財産はゼロです。 デリゲートのこれらのインスタンス変数を作成し、deallocでそれらを解放する必要はありませんか?なぜこれは漏れではないのですか?あるいは私はインストゥルメントツールを間違って使っていますかnavigationController and leaking

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

     // two alloc calls which would imply I need a release 
    UINavigationController *navController = [[UINavigationController alloc] init]; 
    UIViewController *calcController = [[CalculatorViewController alloc] init]; 

    [navController pushViewController:calcController animated:YES]; 

    [window addSubview:navController.view]; 
    [window makeKeyAndVisible]; 

     // can not release here, if i do, no views show up 
     // [navController release]; 
     // [calcController release]; 

     return YES; 
} 
... 
// NOTE: No dealloc for navController or calcController 
- (void)dealloc { 
    [window release]; 
    [super dealloc]; 
} 

答えて

1

navControllercalcControllerの両方がプログラムの存続期間中存在します。プログラムが終了すると、すべてがパージされるため、問題はありません。あなたには漏れがありますが、無関係なものはありません。

+0

意味があります。 navControllerで何が起こっているのですか?それは魔法のようにself.navigationControllerプロパティにアタッチされていますか?インスタンス変数にすると、コードはよりセクシーになるでしょうか?または、あなたが言うように、それは問題ではありません。 – vesselhead

+0

はい、次の行のためです: '[window addSubview:navController.view];'(ウィンドウによって)そのビューが保持されているので、コントローラは保持されます。 – PengOne

+0

この場合、コントローラとnavControllerの両方と、calcControllerのビューがあります。皆さんは非常に迅速に対応しています。これ大好き。 – vesselhead

0

アプリケーションデリゲートはアプリケーション実行中に存在するため、アプリケーションが終了する直前にメモリリークが表示されます。したがって、技術的には「リーク」が発生しますが、アプリケーションがメモリからパージされる直前にのみ発生します。

+0

tx simon。とても有難い。これについて考えてみましょう...インスタンス変数にした場合、コードはよりセクシーになりますか?または、あなたが言うように、それは問題ではありません。 – vesselhead

関連する問題