我在我的应用程序中使用UITableViewController。从tableview控制器弹回到后面时,我将nil设置为表视图以从内存中释放视图控制器。它再次调用viewDidLoad,请解释我为什么会这样。
-(void)handleBackButton{
self.tableView=nil;
[self.navigationController popViewControllerAnimated:YES];
}
答案 0 :(得分:1)
您可以在viewDidLoad
中设置断点并查看堆栈跟踪以查看它重新加载其视图的原因。
但我可以做出有根据的猜测。当您告诉导航控制器弹出一个视图控制器时,它需要在屏幕上为该视图控制器的view
设置动画。为此,它可能会向消失的视图控制器询问其view
。
UITableViewController
的{{1}}与其view
相同。将tableView
设置为tableView
时,您还会将nil
设置为view
。因此,当导航控制器向表视图控制器询问其nil
时(因此它可以为屏幕上的视图设置动画),表视图控制器会注意到它的view
为零,因此它会加载其视图。要加载其视图,它会自行发送view
,然后自行发送loadView
。
我不知道为什么你会真的费心去卸载视图。如果视图控制器本身被取消分配,它将释放其视图(除非您将视图保留在其他位置,否则将取消分配视图)。如果视图控制器没有被取消分配,那通常不是因为您可能希望很快将其视图重新放回屏幕上吗?
无论如何,如果您真的想摆脱视图控制器的视图,请不要将其viewDidLoad
设置为view
,而视图可能仍在屏幕视图层次结构中。等到视图明确超出层次结构。例如,子类nil
,并覆盖UITableViewController
,如下所示:
didMoveToParentViewController: