コントローラーがビューのowner
である場合、コントローラーはビューに弱い参照(非retain
)を保持しますが、コントローラーはビューへの強い参照を保持します。この場合、あなたのnavigationControllerはオートレリースされているので、理論的には解放されなくてはなりません。それ以外の人は誰もいない限りretain
です。
navControllerのビューは、サブビューとして別のビューに追加されました。つまり、親ビューによって保持されます。これは問題です。ビューにコントローラへの呼び出しがあると、それらの呼び出しは割り当て解除されたオブジェクトに移動するためです。 これのためにあなたはEXC_BAD_ACCESS
を取得し、アプリケーションがクラッシュする時間は99%です。他の1%はずっと悪いです。
幸いにも、上記の災害を防ぐために必要なのは、あなたのナビゲーションコントローラを "所有"して、それを@property(保持)してナビゲーションコントローラを割り当てるものです。 (自動リリースを維持する、その部分は良いです) ナビゲーションコントローラを所有するのに適しているのは、親ビューのビューコントローラとアプリケーションデリゲートです。
このようにして、コントローラーは少なくとも1回は保持されているため、必要な限り長く動きます。
ここで重要なのは、コントローラとビューの区別です。ビューオブジェクトは保持され、コントローラオブジェクトはalloc'dされ、次にオートレリースされるので、保持しなければ消えてしまいます。
を除いて、彼はそれを自動リリースしました – Colin
編集されました - ありがとう。 –