2011-07-08 35 views
0

我正在使用两个不同视图控制器和三个不同视图的iOS应用程序。第一个视图控制器只有一个视图,这是一个菜单类的屏幕。另一个视图控制器有两个视图,这两个视图都大量显示内容(视频,图像,声音等)。问题是这个视图控制器的第二个视图绝对不得不释放它的所有对象,当被解散时,它不是。有一个来自另一个类的对象(一个自定义视频播放器)没有被释放,这导致该应用程序行为不正常。我知道它并没有被释放,因为它的一些对象在内存中仍然存在,所以,在我浏览整个代码(1500多行代码)之前,在我想要的时候寻找可能没有空闲的对象时,有没有办法强迫对象释放它的内存?像冲水或什么的?有没有办法强制一个对象释放可可内存?

+0

我不确定我是否明白了:您是否认为,您在代码中的内存管理方面所做的一切都可以做,并且框架做错了或者您认为您错过了发布某些对象而不想通过整个代码来查找它可能是哪个对象? –

+0

从苹果推荐的方式是手动发布你的对象,如果你知道他们的作用域,当他们对你没用时,但如果你不这样做,那么每个作用域使用'autoreleasepool'。它将最大限度地减少对象泄漏并提高性能。 – Wasim

+0

最常见的一种错误是在将对象添加到NSArray,NSDictionary或推送视图后不释放对象。您也可以使用cmd + shift + B在XCode 4中运行分析(也许是3.2?)。这会告诉你哪里可能发生泄漏。确保每个'init'或'retain'与'release'配对。 –

回答

0

作为原始测试,您可以在视频播放器对象上调用dealloc,这会将其从内存中释放。如果其他对象仍在使用它,则当该对象尝试向其发送消息时,您的应用程序将会崩溃。当发生这种情况时,您可以查看堆栈跟踪以获取有关挂在其上的更多信息。仪器应用程序也可以帮助你。

1

对象的内存在dealloc -ed时会立即释放。当release一个对象,并且它的保留计数达到零时,将自动调用dealloc。如果在释放它们后仍有对象仍在内存中,则很可能它们是过度保留的,或者其他对象(如autorelease池)仍然保留它们。

相关问题