gpt4 book ai didi

objective-c - 为什么要释放此对象?

转载 作者:搜寻专家 更新时间:2023-10-30 19:40:52 26 4
gpt4 key购买 nike

我正在开发一个 iPhone 应用程序,我试图将一个 View 推送到导航 Controller 中,我以前做过很多次,但是,我在使用这个特定应用程序时遇到了一些问题。我有一个 TableView ,当用户选择一行时,新 View 被推送到 Controller 中:

DataWrapper *row=[[self.rows objectAtIndex:[indexPath section]] objectAtIndex:[indexPath row]];
DataViewController *nextController=[[DataViewController alloc] initWithNibName:@"Data" bundle:[NSBundle mainBundle]];
[nextController setInfo:row];
[nextController setRow:[indexPath row]];
[nextController setParent:self];
[self.navigationController pushViewController:nextController animated:YES];
[nextController release];

一切顺利,直到用户点击后退按钮,我得到一个异常,并使用 NSZombieEnabled 并得到这个:

-[DataViewController respondsToSelector:]: message sent to deallocated instance 0x4637a00

所以我尝试删除 [nextController release] 并且实际上它起作用了,但是为什么????我分配了 nextController,所以我应该释放它,对吗?如果有这样的事情,我觉得发布这个应用程序是不对的,我觉得它会失败。请让我知道您的想法。

最佳答案

您的 nextController 没有被导航 Controller 保留。如果你释放它,因为只有一对 init/release,对象被释放。稍后,当 navigationController 尝试向其发送消息时,您会看到错误。

这也是删除 [nextController release] 修复问题的原因。

你是对的,如果你分配了,你应该释放它。但警告只是之后您的应用程序完成了它,而不是之前

一些对象将在应用程序的几乎整个生命周期内保持分配状态,所以不要感觉太糟糕。

关于objective-c - 为什么要释放此对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1768420/

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