gpt4 book ai didi

iphone - 我不知道为什么这个 TableView 代码崩溃

转载 作者:行者123 更新时间:2023-11-28 23:00:22 24 4
gpt4 key购买 nike

你好我正在学习iOS编程

我创建了一个项目,它是一个空的应用程序

并且我创建了没有 xib 文件的 TableView Controller 。

然后我在 didFinishLaunchingWithOptions 中插入了后续代码

TableViewController *tvc = [[TableViewController alloc] init];
[self.window addSubView:tvc.view];
[tvc release];

当我向下滚动时,这段代码崩溃了。这是为什么?

当我注释这段代码时

[tvc release];

程序不会崩溃。

我没有在 AppDelegate 文件中写 dealloc。

这是为什么呢?

我想我用 alloc 创建了 TableView Controller

因此保留计数为 1。

并将 subview 添加到窗口和 TableView Controller 保留计数为 2。

所以我发布 TableView Controller

但是当我向下滚动时它崩溃了。

我不知道为什么..

请帮帮我

最佳答案

很简单,添加tvc.view作为窗口的 subview 导致tvc.view被保留但不保留tvc本身。本质上,您的 TableViewController 实例在您对其调用 release 后立即失效。当您滚动时,应用程序崩溃可能是因为 TableViewController 实例被配置为 UITableViewUIScrollView 或任何其他相关联的委托(delegate)或数据源tvc.view.

另请注意,您显示 View 的方式不是推荐的方式。实际上,您应该调用 presentModalViewController:pushViewController: 并传递 TableViewController 实例。这将导致 TableViewController 被保留,直到它被关闭/弹出,使您可以安全地调用 release,就像您的示例代码中一样。

或者,由于您是作为 didFinishLaunchingWithOptions 的一部分手动执行此设置,您也可以直接设置 window.rootViewController,但同样不推荐这样做。 XCode 允许您指定应用的默认/ Root View Controller ,并会在应用启动时自动为您设置。

关于iphone - 我不知道为什么这个 TableView 代码崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10117133/

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