你好,我正在学习iOS编程

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

我创建了没有xib文件的表视图控制器。

我在didFinishLaunchingWithOptions中插入了以下代码

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


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

当我评论此代码

[tvc release];


程序不会崩溃。

我没有在AppDelegate文件中编写dealloc。

这是为什么??

我想我用alloc创建了表视图控制器

因此保留数为1。

并将子视图添加到窗口和表视图控制器,保留计数为2。

所以我释放表视图控制器

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

我不知道为什么。

请帮帮我

最佳答案

很简单,将tvc.view添加为窗口的子视图会导致保留tvc.view,但不会保留tvc本身。本质上,您在TableViewController实例上调用release就会立即失效。可能是因为TableViewController实例被配置为UITableViewUIScrollView或与tvc.view关联的任何其他事物的委托或数据源,所以当您滚动时,应用程序崩溃。

还要注意,显示视图的方式不是推荐的方法。确实,您应该调用presentModalViewController:pushViewController:并传递TableViewController实例。这将导致TableViewController一直保留到被解除/弹出为止,这使您可以像示例代码中一样安全地调用release

或者,由于您是作为didFinishLaunchingWithOptions的一部分手动进行此设置的,因此您也可以直接设置window.rootViewController,尽管再次不建议这样做。 XCode允许您指定应用程序的默认/根视图控制器,并在应用程序启动时自动为您设置。

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

10-13 08:15
查看更多