ブレークポイントを設定viewDidLoadし、スタック トレースを調べて、ビューをリロードしている理由を確認できます。
しかし、私は経験に基づいた推測をすることができます。ナビゲーション コントローラーにビュー コントローラーをポップするように指示する場合、そのビュー コントローラーをview画面外にアニメーション化する必要があります。そうするために、おそらく、消えるView Controllerにそのview.
A UITableViewController'sviewはその と同じtableViewです。に設定tableViewするとnil、 にも設定さviewれnilます。そのため、Navigation Controller が Table View Controller にview(ビューを画面外にアニメーション化できるように) 要求すると、Table View Controller はそれviewが nil であることを認識し、そのビューをロードします。ビューをロードするには、自分自身を送信しloadView、次に自分自身を送信しますviewDidLoad。
ビューをアンロードしようとするのが本当に面倒な理由がわかりません。ビュー コントローラー自体の割り当てが解除されると、そのビューが解放されます (別の場所に保持していない限り、ビューの割り当てが解除されます)。また、View Controller の割り当てが解除されない場合、それは通常、そのビューをすぐに画面に戻したいからではないでしょうか?
とにかく、本当にビュー コントローラーのビューを削除したい場合は、ビューがまだ画面上のビュー階層にある可能性がある間は、そのビューviewをに設定しないでください。nilビューが確実に階層から外れるまで待ちます。たとえば、 subclassUITableViewControllerと overridedidMoveToParentViewController:は次のようになります。
- (void)didMoveToParentViewController:(UIViewController *)parentViewController {
[super didMoveToParentViewController:parentViewController];
if (parentViewController == nil) {
self.tableView = nil;
}
}