0

今日、厄介なバグを探した後、PopToRootNavigationController が呼び出された場合に備えて、ビュー コントローラーがポップされる順序を追跡しました。私はかなりショックを受けました。

3つのView Controllerがあるとしましょう

A (ルート)

B

  C

コントローラー C で PopToRoot を呼び出すと、スタックから削除される最初のコントローラーは B であり、B が削除された後にのみ、コントローラー C が削除されます。

私は正反対のことを期待されていました。最後にプッシュされたものは、最初にポップされるものです。

Appleがこの種の動作を選択する理由を誰か説明できますか?

ありがとう

4

2 に答える 2

0

スタックに 100 個のビューコントローラーがあり、実行したいとします。

popToRootViewControllerAnimated:

したがって、最後のView Controllerに到達するまで、すべてのView Controllerを1つずつポップしても意味がありません..すべてのオブジェクトを1つずつ解放することを期待しているため、これには時間がかかります..だからiosが行うことは、それだけです最後のView Controllerにポップし、2番目のView Controllerを解放します。したがって、このように 2nd が解放されると、後続のすべての子オブジェクトも解放されるため、はるかに高速になります (ヒープ システムで動作すると思います)。

あなたがそれをポップするときのように..

popToViewController:animated:

これは、指定されたビュー コントローラーがナビゲーション スタックの一番上に来るまで、ビュー コントローラーをポップします。

これが空気の一部をきれいにすることを願っています..

于 2012-05-03T15:53:58.487 に答える
0

私が間違っていなければ、取引は次のとおりです。

popToRootViewControllerAnimated:

ルート ビュー コントローラーを除くスタック上のすべてのビュー コントローラーをポップし、表示を更新します。

しかしpopViewControllerAnimated:

ナビゲーション スタックからトップ ビュー コントローラーをポップし、表示を更新します。(あなたの状況では、トップビューコントローラーはCになると思います)

これがあなたが探しているものであることを願っています..

于 2012-05-03T14:57:45.413 に答える