2010-11-24 13 views
0

大きなブロック 'o'テキストにはお詫びしますが、私は書いているアプリケーションの一部としてUINavigationControllerを使って遊んでいる初心者です私は、UINavigationControllerにView Controllerを追加する方法と、(もしあれば)それらを解放する必要があるときに、どのように処理すべきなのだろうと思っています。UINavigationController - 押されたビューコントローラなどを解放するとき

私はそれを見るようにビューコントローラを追加する場合、二つの潜在的なアプローチがある:

  1. は、管理クラス内の各ビューコントローラのインスタンス変数があります。インスタンス変数をnavコントローラにプッシュする前に初期化します(インスタンス変数がnilの場合)。続いて、管理クラスのdeallocメソッドでView Controllerを解放します(nilでない場合)。

  2. メソッド内のローカル変数としてビューコントローラを作成し、それを即座に解放する前にナビゲーションコントローラにプッシュします。

ただし、これらのそれぞれの妥当性は不明です。 (私の感覚は、インスタンス変数のアプローチをすることですが、おそらくそれは私の部分の理解の欠如のためです。)

私は、私の混乱は、ナビゲーションコントローラのスタックにプッシュされたビューコントローラを処理する責任があるかどうか、またはビューコントローラスタックからポップされたときにそのコントローラ自体を破棄するかどうかを十分に把握できます。 (例:ユーザーが「戻る」ボタンを押したとき)

前者の場合、インスタンス変数アプローチを使用して管理オブジェクトにUINavigationControllerDelegateメソッドを実装する必要があることがわかります

最終的に(死後のボーナスポイントのために)メソッドがそのパラメータの1つの保持カウントをインクリメントするかどうか簡単にどのように伝えることができますか? (そこドキュメントの任意の手がかりであることが表示されませんが、おそらく私が何かを明らかに不足しています。)例えば、私は

[[self navigationController] pushViewController:exampleVC animated:YES]; 

...の線に沿って何かを使用する場合...これは意志View Controllerの保持カウントを増やしますか? (もう一度、私の消化管の感じはであるべきですが、それはこれらの危険な時代などのチョコレート防火服屋と同じ程度です)

ありがとうございます。

答えて

1

これはかなり簡単です。あなたがオブジェクトを他のオブジェクトに渡すと、それはあなたの直接のコントロール下にないものと一緒に何かを行います。それはあなたが渡すオブジェクトを保持します(ほとんどすべてがそのように動作します)。

例:すべてのNSArray/Dictionary/Setコレクションは、そのようなレコードに含まれるオブジェクトの割り当てを解除すると、一部のエントリが無効でコレクションがわからないため、オブジェクトを保持します。

ビューコントローラが表示されているか破棄されているかどうかわからないので、ナビゲーションコントローラなどについてもまったく同じです。

+0

ヒューリスティックのおかげで - 私はそれらの言葉でそれについて考えたことはありません。 –

+0

こんにちはDunkelsternさん、この投稿からかなりの時間がかかりましたが、渡されたオブジェクトが保持されていることを明示するAppleのdocへのリンクを提供できますか?私はこれを試して同意しましたが、その証拠は見つかりませんでした。(ロギング保持カウントは、ドキュメントに頼るべきではないと言われていなかったかもしれません:P) – Sailesh

+0

"Cocoa Fundamentals Guide"を読まなければならないのではないかと思います。 Works "(http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html#//apple_ref/doc/uid/TP40002974-CH4-SW10) – Dunkelstern

関連する問題