我们正在为 iPhone 制作游戏。我们已经完成了开发,现在正在努力优化游戏的内存。我们注意到,当我们在游戏中加载一个特定的 MVC 并关闭它时,并不是所有分配的内存都被释放。(添加了大约 4-5MB)。如果您继续玩 15-20 分钟,这会使游戏的内存使用率非常高,并且在发出内存不足警告后游戏最终崩溃。
这是我绑定(bind)的
1. 在游戏上运行静态分析器并修复所有内存泄漏和警告。
2. 手动检查所有类的 dealloc 是否被调用。这似乎没问题。
3. 还尝试在 Xcode 中运行分配工具,但其中的大部分条目都是 CFStrings、mallocs 和 CFNumbers 等,但并没有真正说明它们来 self 的哪个类。有没有更好的方法来使用分配工具?
我还有一些与内存相关的问题
1. 我们在游戏中的很多地方都使用了自动释放对象,而没有使用自动释放池。我的理解是自动释放的对象应该在下一个运行循环中释放并且不应该造成这么大的问题?
2. 此外,如果我通过 xib 文件加载图像,它们是否会被 iOS 缓存。他们也会占用内存吗?
我该如何解决我的内存使用问题。任何帮助,将不胜感激。 谢谢!
最佳答案
几个想法:
您在使用核心基础类(class)吗?确保对于您调用
CFRelease
(或转让所有权)的名称中包含Create
或Copy
的每个对象然后release
或autorelease
Objective-C 对象)。您是否也使用过 Instruments 中的 Leaks 工具?我想是的,但你没有提到它。参见 Finding Leaks in your App在 Instruments 用户指南中。
您是否通过
imageNamed
加载图像?这会缓存图像并且不利于释放它们。使用imageWithContentsOfFile
并手动管理缓存会更安全。我假设您的 View Controller 的
dealloc
正在被调用并且您正在释放与类属性/ivars 关联的所有对象?你有僵尸吗?这对于诊断目的非常有用,但在关闭僵尸之前您不会释放内存。
关于ios - 减少 iPhone 应用程序的内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14446432/