我正在使用两个不同视图控制器和三个不同视图的iOS应用程序。第一个视图控制器只有一个视图,这是一个菜单类的屏幕。另一个视图控制器有两个视图,这两个视图都大量显示内容(视频,图像,声音等)。问题是这个视图控制器的第二个视图绝对不得不释放它的所有对象,当被解散时,它不是。有一个来自另一个类的对象(一个自定义视频播放器)没有被释放,这导致该应用程序行为不正常。我知道它并没有被释放,因为它的一些对象在内存中仍然存在,所以,在我浏览整个代码(1500多行代码)之前,在我想要的时候寻找可能没有空闲的对象时,有没有办法强迫对象释放它的内存?像冲水或什么的?有没有办法强制一个对象释放可可内存?
0
A
回答
0
作为原始测试,您可以在视频播放器对象上调用dealloc
,这会将其从内存中释放。如果其他对象仍在使用它,则当该对象尝试向其发送消息时,您的应用程序将会崩溃。当发生这种情况时,您可以查看堆栈跟踪以获取有关挂在其上的更多信息。仪器应用程序也可以帮助你。
1
对象的内存在dealloc
-ed时会立即释放。当release
一个对象,并且它的保留计数达到零时,将自动调用dealloc
。如果在释放它们后仍有对象仍在内存中,则很可能它们是过度保留的,或者其他对象(如autorelease池)仍然保留它们。
相关问题
- 1. 有没有办法强制一个程序留在内存中
- 2. 有没有办法释放分配给Symfony 2表单对象的内存?
- 3. 有没有办法让一个可绑定的mxml对象?
- 4. 有没有办法让一个colorbox对象可拖动?
- 5. 有没有办法让一个对象
- 6. 有没有办法*真的*强制pydev使用强制内建?
- 7. 有没有办法强制JavaFX发布视频内存?
- 8. 有没有办法腌制FTP对象?
- 9. 对象在释放后没有释放
- 10. PHPExcel没有释放内存
- 11. 有没有一个资源可以彻底解释Windows内存?
- 12. 是否可以释放现有内存?
- 13. 有没有办法在Groovy中拥有可调用的对象?
- 14. 有没有办法强制cin提交?
- 15. 有没有办法强制启用quicktime?
- 16. git merge:有没有办法强制--squash?
- 17. 有没有办法写每个对象
- 18. 可可 - 有没有办法检查NSURLConnection是否存在缓存?
- 19. 可可:有没有办法一次删除几个文件?
- 20. 有没有办法让覆盖对象不可点击?
- 21. 有什么办法可以在Redux中“提交”状态来释放内存吗?
- 22. 有没有办法从一个活动释放内存,当一个新的启动?
- 23. jquery“对象没有办法”
- 24. iPhone - 释放视图,并没有更多的可用内存
- 25. 释放对象的内存
- 26. 在Haskell中,有没有办法强制强制多态呼叫?
- 27. 关于UITabBarController,有没有办法强制一个视图在选中新选项卡时被完全释放
- 28. 有没有办法在c#中强制函数内联?
- 29. 有没有办法让一个窗口的所有BindingExpression对象?
- 30. 有没有办法强制TextMate缓存文件?
我不确定我是否明白了:您是否认为,您在代码中的内存管理方面所做的一切都可以做,并且框架做错了或者您认为您错过了发布某些对象而不想通过整个代码来查找它可能是哪个对象? –
从苹果推荐的方式是手动发布你的对象,如果你知道他们的作用域,当他们对你没用时,但如果你不这样做,那么每个作用域使用'autoreleasepool'。它将最大限度地减少对象泄漏并提高性能。 – Wasim
最常见的一种错误是在将对象添加到NSArray,NSDictionary或推送视图后不释放对象。您也可以使用cmd + shift + B在XCode 4中运行分析(也许是3.2?)。这会告诉你哪里可能发生泄漏。确保每个'init'或'retain'与'release'配对。 –