0

私のiPadアプリケーションのルートレベルのビューコントローラーはUISplitViewControllerです。したがって、2つのビューコントローラがあります。

  • 1つのマスタービューコントローラー(viewControllersプロパティの項目0)
  • 1つの詳細ビューコントローラー(viewControllersプロパティの項目1)

詳細ビューコントローラーは、マスタービューコントローラーのタップとイベントに応じて変更するカスタムビューコントローラーです。

この詳細ビューコントローラーを変更するには、次のコードを使用します。

- (void)replaceSecondViewControllerBy:(UIViewController *)viewController {
    [[self.viewControllers objectAtIndex:1] dismissModalViewControllerAnimated:NO];
    NSArray *newVC = [NSArray arrayWithObjects:[self.viewControllers objectAtIndex:0], viewController, nil];
    self.viewControllers = newVC;
}

私の問題は、アプリがメモリ警告イベントを受信すると、以前の詳細ビューコントローラーを除くdidReceiveMemoryWarningすべてのビューコントローラーに対してメソッドが呼び出されることです。また、他のオブジェクト(まだ実行されている可能性のある非同期メソッドを含む)のデリゲートであるため、割り当てが解除されていません。

私の質問は:

  • UIViewControllerがdidReceiveMemoryWarningメッセージを受信するためのルールは何ですか?以前の詳細ビューコントローラーがそれらを受け取らないのはなぜですか?
  • これらの古いビューコントローラを安全に呼び出すことはできますdidReceiveMemoryWarningか?viewDidUnload
4

1 に答える 1

0

UIViewController作成時にサブスクライブしているように見えますUIApplicationDidReceiveMemoryWarningNotification。割り当てが解除されたときの通知の監視を削除します。これdidReceiveMemoryWarningは、コントローラーのビューがビュー階層にない場合でも呼び出されます。したがって、コントローラーの割り当てが解除されていないことを確認してください。

可能性は低いですが、次のコードを使用してコントローラーから通知監視を削除すると、メモリー通知のリッスンも停止します。

[[NSNotificationCenter defaultCenter] removeObserver:controller name:nil object:nil];
于 2011-11-29T22:50:27.313 に答える