gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 03:43:05 26 4
gpt4 key购买 nike

我在我的应用程序中使用 UITableViewController。当从 TableView Controller 弹出到后面时,我将 TableView 设置为 nil 以从内存中释放 View Controller 。它再次调用 viewDidLoad,请解释一下为什么会发生。

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

最佳答案

您可以在 viewDidLoad 中设置断点,然后查看堆栈跟踪以了解其重新加载 View 的原因。

但我可以做出有根据的猜测。当您告诉导航 Controller 弹出 View Controller 时,它需要以动画方式将该 View Controller 的 view 从屏幕上移开。为此,它可能会向消失的 View Controller 询问其 View

UITableViewControllerview 与其 tableView 相同。当您将 tableView 设置为 nil 时,您还将 view 设置为 nil。因此,当导航 Controller 向 TableView Controller 询问其 view (以便它可以将 View 动画移出屏幕)时, TableView Controller 会注意到它的 view 为 nil,所以它加载它的 View 。为了加载其 View ,它会发送自己 loadView ,然后发送自己 viewDidLoad

我不知道你为什么要费心尝试卸载 View 。如果 View Controller 本身被释放,它将释放其 View (这将释放 View ,除非您将其保留在其他地方)。如果 View Controller 没有被释放,这通常不是因为您可能想尽快将其 View 放回到屏幕上吗?

无论如何,如果您确实想摆脱 View Controller 的 View ,请不要将其 view 设置为 nil,而该 View 可能仍处于 on-屏幕 View 层次结构。等到 View 明确脱离层次结构。例如,子类 UITableViewController,并重写 didMoveToParentViewController:,如下所示:

- (void)didMoveToParentViewController:(UIViewController *)parentViewController {
[super didMoveToParentViewController:parentViewController];
if (parentViewController == nil) {
self.tableView = nil;
}
}

关于iphone - iOS 中 UITableViewController 中的 tableView 设置为 nil 后,viewDidLoad 方法再次调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18118660/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com