1

UINavigationControllerで、esdeallocが呼び出されたとき?私のアプリには、4つのViewControllerがあります。

View1Controller-> View2Controller-> View3Controller-> View4Controller

View2Controllerでimを実行し、[戻る]ボタンを押してView1Controllerに移動すると、View2Controllerのdeallocが呼び出されます。ただし、View1Controllerでimを実行してView2Controllerに移動すると、deallocがView1Controllerで呼び出されることはありません。

大丈夫ですか?またはそのリーク?

ありがとう。

編集

4

4 に答える 4

4

UINavigationViewControllerスタックでViewControllerをプッシュおよびポップすると、一般的な意味でスタックのように機能します。数字を含むスタックがあり、2を押すと、36は2つの数字のスタックになり、2が消えることは期待できません。View Controllerを押すのはまったく同じです。ViewController2を押すと、ViewController1が消えることは期待できません。

ただし、ポップする場合は異なります。36をポップオフした場合、36がまだ存在しているとは思わないでしょう。ビューコントローラと同じです。ViewController2をポップオフすると、ユーザーインターフェイスにViewController1ビューが表示されたときに割り当てが解除されます。

于 2012-05-16T18:51:18.703 に答える
1

ビューコントローラでNSTimerを確認します。NSTimerが存在する場合は、コントローラーのviewWillDisappearまたはviewDidDisappearで無効にします。

于 2012-10-10T13:28:01.413 に答える
1

これは、保持カウントとも関係があります。ビューコントローラをポップオフし、他の方法で参照しない場合、参照カウントはゼロになり、iOSはすぐに割り当てを解除する可能性があります。たとえば、所有しているクラスのメンバーを使用して何らかの方法で参照していて、ナビゲーションスタックからポップされたときに参照カウントがゼロにならなかった場合、その時点で割り当てが解除されません。

于 2012-05-16T19:04:07.757 に答える
0

ビューコントローラをナビゲーションスタックにプッシュしても、元のビューコントローラがアンロード/ロック解除されません。それはまだ新しいものの下のスタックに存在します。ビューコントローラからポップすると、他の場所に保持されていない場合(強力なポインタを使用して)、割り当てが解除されます。

編集:View4ControllerがView2Controllerで発生する何かに何らかの形で反応するのはなぜですか?あなたがそれを説明した方法から、それはその時点でナビゲーションスタックにあるべきではありません。

edit2:

覚えておくべきことの1つは、ナビゲーションスタックに何かをプッシュすると、その保持カウントが1増加することです。ナビゲーションスタックから何かをポップすると、その保持カウントは1減少します。オブジェクトの保持カウントが0に達すると、割り当てが解除されます。

押すと、押しているアイテム(今押したものの下)の保持カウントは変更されません。それはまだナビゲーションコントローラーによって保持されているため、割り当てが解除されることはなく、代わりに消えます。ポップすると、ポップされたアイテムの保持カウントが低下し、0になると割り当てが解除されます。

于 2012-05-16T18:45:10.720 に答える