你好,我正在学习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
实例被配置为UITableView
或UIScrollView
或与tvc.view
关联的任何其他事物的委托或数据源,所以当您滚动时,应用程序崩溃。
还要注意,显示视图的方式不是推荐的方法。确实,您应该调用presentModalViewController:
或pushViewController:
并传递TableViewController
实例。这将导致TableViewController
一直保留到被解除/弹出为止,这使您可以像示例代码中一样安全地调用release
。
或者,由于您是作为didFinishLaunchingWithOptions
的一部分手动进行此设置的,因此您也可以直接设置window.rootViewController
,尽管再次不建议这样做。 XCode允许您指定应用程序的默认/根视图控制器,并在应用程序启动时自动为您设置。
关于iphone - 我不知道为什么这个表格 View 代码崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10117133/