2

UINavigationController を使用し、rootViewController を追加する非常に単純なコードがあります。いくつかの処理が発生した後、現在のView Controllerをポップオフして、別のものに置き換えたいと思います。これは正常に動作しているように見えますが、元のビュー コントローラーはロックを解除しません。私はそのdeallocにブレークポイントを設定しましたが、ヒットすることはありません。以下は私のコードです。なぜ起こるかわからない。startController を 2 回リリースしたかどうかをテストするためだけに、それはなくなります。

StartViewController *startController = [[StartViewController alloc] initWithNibName:@"StartViewController" bundle:[NSBundle mainBundle]]; 

    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:startController];
    [nav pushViewController:startController animated:NO];

    self.navController = nav;

    [startController release];
    [nav release];

助けてくれてありがとう。

4

3 に答える 3

1

最終的な目標は、View Controller の保持カウントをゼロにすることです。そのため、ビューが保持しているすべてが解放され、ビューが保持されている場所でも解放されていることを確認してください。

次の考えられる原因を確認してください。

  1. カスタムの戻るボタンがある場合は、必ず navController からビュー コントローラーをポップしてください。デフォルトの [戻る] ボタンは正常に機能します。

  2. viewDidUnload ですべての IBOutlets が nil に設定されていることを確認してください

    - (void)viewDidUnload 
    {
       [super viewDidUnload];
       self.webView = nil;
    }
    
  3. ビューがイベントを受け取るモデル クラスのオブザーバーである場合

例えば

model.addObserver(myView);

そして必ずやります

model.removeObserver(myView);

これが役立つことを願っています。

于 2011-03-17T20:21:08.257 に答える
0

ルートビューコントローラをポップオフしようとしていました。代わりに、オブジェクトsetViewControllersからのメッセージを使用して、すべてのViewControllerを置き換えました。UINavigationController

于 2011-03-18T16:01:04.060 に答える
0

self.navController が参照を保持しているように見えます。多分置く

self.navController =nil; 

ビューがポップされたときに解放されるように、適切な場所に配置します。

于 2011-03-17T22:00:57.297 に答える