gpt4 book ai didi

ios - 这段代码是否过度发布?

转载 作者:行者123 更新时间:2023-11-29 13:18:35 26 4
gpt4 key购买 nike

我找不到问题出在哪里,但是这段代码崩溃了。我是否过度释放了任何物体?

settings = [[SettingsViewController alloc] initWithNibName:@"SettingsController" bundle:nil];
settings.hidesBottomBarWhenPushed = YES;

NSArray * arrayWithRootController = [[NSArray alloc] initWithObjects:settings, nil];
[(UINavigationController*)([self.tabBar.viewControllers lastObject])setViewControllers:arrayWithRootController];
[arrayWithRootController release];
[settings release];

如果我删除行

[settings release];

应用不会崩溃。但我很确定它是正确的。问题可能出在其他地方吗?

有什么想法吗?非常感谢

最佳答案

您在此片段中并没有过度释放,但显然有些地方不对。将 Root View Controller 添加到数组将保留它,但仅在数组的生命周期内。当数组结束时,其中的所有对象也会被释放(我猜测这里发生了什么)。

尝试一些事情:首先,确保将阵列放在您认为的位置:

[(UINavigationController*)([self.tabBar.viewControllers lastObject])setViewControllers:arrayWithRootController];

您期望 [self.tabBar.viewControllers lastObject] 是什么?您确定这是您要分配新阵列的地方吗?如果接收器无效,您的数组将不会保留在下一行中,这意味着 View Controller 也将被释放。

我不熟悉您的体系结构,但您似乎正在将一组 View Controller 分配给一个 View Controller 。 self.tabBar 是一个导航 Controller ,您可以在其上调用setViewControllers。但是 self.tabBar.viewControllers lastObject... 很可能这是一个 View Controller ,但不一定是导航 Controller ,它可能不会响应 setViewControllers(在这种情况下它应该崩溃,除非它是 nil,这我猜它可能是)。

最后,尝试使用 Instruments 工具 Zombies 看看是否可以查明意外释放的来源。

关于ios - 这段代码是否过度发布?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14984991/

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