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

标签 iphone objective-c ios xcode

你好我正在学习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/

相关文章:

iphone - 不可缩放的 webview,适用于 iPhone 和 iPhone4 分辨率

ios - 我怎样才能从这个字符串中得到一个 NSDate,这个 NSDate 到 long 或 NSTimeInterval

ios - 我怎么能改变占位符文本的固定字符的颜色,因为我有点困惑执行这个

iphone - 在另一个 subview 之上检测一个 subview

ios - 访问和下载按需资源 iOS9

ios - 在 iOS 中单击本地通知时不打开应用程序

ios - 剃掉 UIImageView 的一侧?

iphone - 从 UIPicker 中的 plist 字典中对数据进行数字排序

iphone - UIImage 的 setAnchorPoint?

ios - 自定义 Segue 没有动画