0

我是 Iphone 应用程序的新手,我正在尝试构建一个基于标签的应用程序。我试图在两个选项卡中的图像顶部都有一个表格。在带有音频链接表的选项卡上和带有视频链接表的另一个选项卡上。

这一切都很顺利,我为这两个表创建了两个视图控制器。除了让它工作之外,所有代码都很好用,我必须在第二个选项卡的 videoTableViewController 中注释掉 - (void)dealloc {} 中的超级 dealloc。

如果我没有收到错误消息:

FREED(id): 消息 numberOfSectionsInTableView: 发送到释放对象

请帮忙,我不知道为什么会这样......

4

2 回答 2

1

如果你没有调用[super dealloc],那么你的对象没有被释放并且你正在泄漏内存。您需要取消对该调用的注释[super dealloc]

您在上面注意到的异常意味着表视图仍在尝试将您的已释放对象作为数据源进行访问。这是您需要解决的问题。据推测,进行此调用的表视图归已释放的视图控制器所有。

如果您的视图控制器不是的子类UITableViewController,那么您将需要release您持有的表视图引用。如果它是 的子类UITableViewController,则必须在其他一些不retain应该在的地方编辑该表视图的地方。

于 2010-03-29T16:30:48.350 回答
0

UITableViewController处理它自己的tableView对象的内存管理,所以理论上你不必担心它。

正如亚历克斯所说,不打电话肯定是不好的[super dealloc];将其排除在外是内存泄漏。

为了解决这个问题,您需要弄清楚为什么您的表格视图比您的视图控制器寿命更长(这就是给您 FREED(id) 错误的原因)。一种猜测是您将视图留在视图层次结构中但释放了控制器。当您从一个视图控制器移到另一个视图控制器时,所需的行为是通过调用然后释放视图控制器来从视图层次结构中删除旧视图[oldView removeFromSuperview],如果您想释放它的话原因removeFromSuperview很重要,因为超级视图总是保留它们的子视图,所以这可能就是你的 tableView 如此不死的原因。

如果您的应用程序不是内存密集型应用程序,那么最简单的方法可能是简单地保持您的视图控制器分配(而不是释放它们)——这将解决您的问题,尽管它并没有真正解决您的表视图寿命比预期长的问题,这可能是一些低效代码的症状,这些代码很容易清理。

于 2010-03-29T17:58:12.293 回答