2

meory 警告が発生したときにビューを管理するプロセスを理解しようとしています。この回答でいくつかの良い情報を受け取りましたが、まだ質問があります。

ビューコントローラーVC2(そのサブビューはビュープロパティです)によって管理されるサブビューを含むビューコントローラーVC1があるとします。最初に、VC2 ビューを別の VC1 ビューに入れたい場合は、次のようにします。

UIView *VC2 = [UIView alloc] initWithFram...];
VC2.delegate = self;
... // other references to VC2, but not to it's view, yet.
[VC1.view addSubview VC2.view];  // At this point VC2 loadView is called automatically,
                                 // followed by VC2 viewDidLoad.

しばらくして、VC2 でメモリ警告が受信されます。したがって、VC2 の didReceiveMemoryWarning が呼び出され、続いて VC2 の viewDidUnload が呼び出されます。

これが私の理解の終わりです(私がすでに言ったことが正しいなら!)

私が魔法のように起こると期待しているのは、VC2 のビューとそのリソースを解放できることです (たとえば、タブ バー コントローラーが参照しているが、現在は表示されていない 1 つのビューである可能性があります)。 VC2 の viewDidLoad メソッドですべて再作成できます。VC2の見解が当面見えないとすれば、解放されるはずだ。

どのように、正確にリリースされますか?didReceiveMemoryWarning は VC2 で実行されます。VC2 は独自のビューをリリースしますか? そうでない場合、何が起こると考えられますか。

2 番目の質問です。VC2 のビューが解放された場合、そのビューが再び必要になるとします (誰かがタブ バーの対応するタブを選択するなど)。私の理解では、VC2 のビュー プロパティが参照されると、VC2 loadView が呼び出されます。最初は、VC1 がプロパティ参照を使用してサブビューとして追加したときに参照されました。タブバーコントローラーは、タブバーコントローラーのviewControllers配列にあるビューコントローラーVC2を介して参照によって呼び出すことができます。したがって、タブバーコントローラーはビュープロパティを参照し、VC2 loadView が呼び出されると思います。

2 番目の質問について説明しましたが、同時に回答した可能性もあります。私がこれを正しく理解しているかどうか誰かが確認できますか?

また、(最初の質問のように) VC2 ビューをどこでどのようにリリースする必要があるのか​​、まだ明確ではありません。

メモリ警告に応答してビューとビュー階層を解放するこのプロセス全体を説明し、解放されたビューが必要なときにどのように再構成されるかを説明するチュートリアルはありますか? それは、このプロセスを理解するのに本当に役立ちます。

4

0 に答える 0