在iOS中的UITableViewController中将nil设置为tableView后,viewDidLoad方法再次调用

时间:2013-08-08 05:40:42

标签: iphone ios objective-c xcode ios6

我在我的应用程序中使用UITableViewController。从tableview控制器弹回到后面时,我将nil设置为表视图以从内存中释放视图控制器。它再次调用viewDidLoad,请解释我为什么会这样。

-(void)handleBackButton{
        self.tableView=nil;
        [self.navigationController popViewControllerAnimated:YES];
}

1 个答案:

答案 0 :(得分:1)

您可以在viewDidLoad中设置断点并查看堆栈跟踪以查看它重新加载其视图的原因。

但我可以做出有根据的猜测。当您告诉导航控制器弹出一个视图控制器时,它需要在屏幕上为该视图控制器的view设置动画。为此,它可能会向消失的视图控制器询问其view

UITableViewController的{​​{1}}与其view相同。将tableView设置为tableView时,您还会将nil设置为view。因此,当导航控制器向表视图控制器询问其nil时(因此它可以为屏幕上的视图设置动画),表视图控制器会注意到它的view为零,因此它会加载其视图。要加载其视图,它会自行发送view,然后自行发送loadView

我不知道为什么你会真的费心去卸载视图。如果视图控制器本身被取消分配,它将释放其视图(除非您将视图保留在其他位置,否则将取消分配视图)。如果视图控制器没有被取消分配,那通常不是因为您可能希望很快将其视图重新放回屏幕上吗?

无论如何,如果您真的想摆脱视图控制器的视图,请不要将其viewDidLoad设置为view,而视图可能仍在屏幕视图层次结构中。等到视图明确超出层次结构。例如,子类nil,并覆盖UITableViewController,如下所示:

didMoveToParentViewController: