你好我正在学习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
实例被配置为 UITableView
或 UIScrollView
或任何其他相关联的委托(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/