如何在标签栏控制器中看不到视图?

时间:2011-09-22 04:17:12

标签: iphone objective-c cocoa-touch memory-management

我有一个带有标签栏导航界面的简单应用。 它有三个视图(A,B和C)和一个模态视图。每个视图都有自己的视图控制器和笔尖。它们都是在界面构建器中设计和连接的。

我想发布不可见的视图。 尝试发布并在出现另一个视图时将其取消,例如

[[[self.navigationController.viewControllers objectAtIndex:0] view] release];       
[[self.navigationController.viewControllers objectAtIndex:0] view] = nil;

它不会引起任何问题,但是当我运行仪器时,它没有任何区别。我没有看到任何内存使用量下降

感谢您的帮助

3 个答案:

答案 0 :(得分:0)

内存使用量的下降可能并不重要,具体取决于发布的viewController保留的内容。我把你的NSLog带到viewController的'dealloc'中,看看它是否真的被释放,或者是否还有其他对象仍然存在。请记住,释放不会释放内存,只有在对象保留计数达到0时才会释放(通过调用dealloc)。

答案 1 :(得分:0)

你不想这样做。让TabBarController为您处理视图控制器。 (它已经在内部保留了你的viewController,所以无论你做什么只会使保留计数不同步)

如果在viewWillDisappear中释放对象,则可以提高内存效率。然后在viewWillAppear中再次重建数据。

答案 2 :(得分:0)

正如@Daryl Teo写道,你应该在viewWillDis/Appear中发布并重新创建(这就是为什么我写这个答案)你有一个名为didReceiveMemoryWarning的方法,使用它!
您可以在调用时简单地注销,并使用模拟器包含的内存警告测试功能进行测试 只需打开一个选项卡,打开另一个选项卡并调用该测试功能。您的调试控制台应该打印出日志。如果不是,你应该仔细检查你是否释放了所有对象,也许有人被过度保留(这也应该在viewWillDisappear中发布)。