1

Instrumentsで遊んでいると、わからないことに気づきました。いくつかの を作成し、UIViewControllerそれらviewの を別の に追加しUIViewます。

CustomVC *vc = [[CustomVC alloc] initWithCustomInitializer:someParameter];
[mainView addSubview:vc.view];

CustomVC のメモリ アドレスを と に記録するinitdealloc、ほとんどすぐに割り当てが解除されることがわかりvcますが、ビューは画面に残り、すべて正常に動作します。

UIViewコントローラは必ずしも必要ではありませんか? それとも、私が誤解している何か他のことが起こっていますか?

4

3 に答える 3

1

UIView は決して ViewController を必要としません。起こっていることは、おそらく VC へのポインタを保持していないということです。ビューへのポインターは mainView によって保持されます。さらに、ARC を使用しているかどうかに関係なく。オブジェクトをメモリに保持したい場合は、強力な(ARC)または保持プロパティが必要です。混乱しないように。必ずしもカスタム サブクラスである必要はありません。UINavigationController を使用しているとしましょう。たとえば、アプリデリゲートでコントローラーを作成し、それを UINavigation コントローラーにプッシュできます。何かがある限り、ポインタを保持する必要はありません。これは非常に基本的なことです。メモリ管理について明確にする必要があります。ここで十分に説明できるとは思いません。iOS 開発に関するスタンフォード コースを確認することを強くお勧めします。 http://itun.es/ru/_zEGD

于 2012-09-29T15:44:13.260 に答える
1

AUIViewはその親 ( ) を保持しない/保持すべきではないため、UIViewControllerへの参照を削除して へUIViewControllerの参照のみを保持するUIViewと、それへの強い参照は保持されず、解放されます。

そのコントローラーへの弱参照は、UIView自動的に nil に設定されます。

UIViewがその作業を行うために「失われた」コントローラーを必要とするかどうかは別の話であり、完全にUIView.

于 2012-09-29T15:46:52.993 に答える
0

一度に 1 つの UIViewController のみが存在する必要があります。ビューコントローラーに属するビューを追加することは悪い習慣です。

あなたの質問に答えるために、上記の制約 (または Apple による設計上の決定) のために、ビューはおそらく他のビュー コントローラーによって保持され、vc から解放されます。

于 2012-09-29T15:58:05.197 に答える