0

すべてのビューの初期化を単独で処理するカスタム UIViewController サブクラスがあります (ペン先は使用しません)。nib からロードされた別の UIViewController サブクラスもあります。どちらも UITabBarController に含まれています。メモリ警告が発生すると、最初のコントローラーは通知を受け取りますが、viewDidUnload は呼び出されません。2 番目のコントローラーも通知を受け取り、その viewDidUnload が呼び出されます。didReceiveMemoryWarning をチェックインしました。self.isViewLoaded は TRUE で、self.view.superview は null です。両方のコントローラー (それぞれのタブ) は、通知が表示される時点では非表示になっています。

メモリ警告の結果としてアンロードするために、カスタム ビュー コントローラが行うべき特別なことはありますか?

4

2 に答える 2

1

サブクラスUIViewContoller化していて、NIB から初期化しない場合は、-loadViewメソッドをサブクラス化する必要があります。そうしないと、iOS はビューをアンロード/再ロードできないと見なします。

以下を実装に追加するだけで十分です。

- (void)loadView {
    [super loadView];
}

そのためのドキュメントの引用を見つけようとします。

残念ながら、ドキュメントはこの問題についてあまり明確ではありません。

于 2012-04-04T14:34:00.907 に答える
0

View Controller Lifecycle に関するドキュメントをチェックアウトします。具体的には、メモリ警告が受信されたときに何が起こるかについてのセクションを確認してください。カスタム ビュー コントローラーのビューが画面上のビューである場合、OS はこのビューを解放しようとしません。メモリの警告が表示されているときに、このビューが画面に表示されていますか? シミュレーターで nib-loaded ビューに移動し、メモリ警告をシミュレートして、カスタム ビューが解放されるかどうかを確認します。また、viewWillUnload が呼び出されているかどうかも確認してください。そして、オーバーライドするこれらのメソッドのいずれかで、super を呼び出すようにしてください。

于 2012-04-04T14:19:04.470 に答える