2010-12-12 20 views
0

私はメモリ管理について質問があります。私のアプリケーションデリゲートでは、私は次のメソッドを持っています。ここで、welcomeViewControllerは象牙である。アプリケーション:didFinishLaunchingWithOptions:メモリ管理

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    welcomeViewController = [[CBWelcomeViewController alloc] init]; 
    UINavigationController *appNavigationController = [[UINavigationController alloc] initWithRootViewController:welcomeViewController]; 
    [self.window addSubview: [appNavigationController view]]; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

welcomeViewControllerのためのメモリを解放するために、私は単純にdeallocメソッドでそれにリリースを呼び出します。

- (void)dealloc { 
    [welcomeViewController release]; 
    [window release]; 
    [super dealloc]; 
} 

私の質問は、appNavigationControllerのメモリを管理するための正しい方法は何ですか、ですか?

答えて

1

appNavigationControllerをインスタンス変数に、releasedeallocに設定する必要があります。

welcomeViewControllerをインスタンス変数として使用する必要はありません。まったく逆です。 単に/ initを割り当ててからUINavigationControllerに渡し、それを保持してからすぐにreleaseにします。

+0

だから私がすべきそれを解放する? 'addSubview: 'の直後にリリースすれば、UINavigationControllerはサブビューをロードしません。また、私はaddSubview :,これは 'appNavigationControllerの保持数を2に増やし、それから私がdeallocで解放すれば、それはまだ1です(つまり、リリースされていません)。返信ありがとう – Jack

+1

@Jack更新が更新されました。 –

+0

ありがとうJacob – Jack

1

現在、welcomeViewControllerをリリースしているように、deallocメソッド内でリリースする必要があります。

(ちなみに、あなたが実際にあなたはナビゲーションコントローラ(つまり、initにそれを使用しましたストレートの後welcomeViewControllerを解放する必要があります。ナビゲーションコントローラがそれを保持しますと、)あなたのinitメソッド内の)