我需要学习内存管理。我有一个使用多个 View (大约 10 个)的应用程序,其中一些附加到选项卡 Controller 。问题是我正在使用图像(我从 Web 服务加载的许多图像)。我面临以下问题。
当我在表格 View 中滚动时内存不断增加(为什么?) - 我检查了 Apple 网站上的 CustomTableViewCell 应用程序,当我使用 Instruments 运行它时,它显示了相同的迹象。
我正在对许多对象使用自动释放,但我发现这些对象实际上并没有被释放并且内存已连接。我怎样才能摆脱这些对象?
如何告诉 NSAutoreleasePool 定期释放未使用的对象?我认为这可以帮助我摆脱有线内存。但我可以这样做吗?
Apple 或其他人是否有任何示例(书籍或在线文章)解释如何使用 Instruments(通过示例详细说明?)以及微调应用程序的内存和性能?
谢谢。
最佳答案
既然我们对自动释放有了“直接说不”的答案,我想我会添加一个关于如何更有效地使用自动释放的提示。不管是好是坏,并不是每个人都会完全避免自动释放——如果没有其他原因,只是因为 Apple 提供了许多方便的方法来交给你自动释放的对象。
您不能只告诉自动释放池释放您不使用的任何对象。没有垃圾回收,它怎么知道?
您可以做的是创建一个本地自动释放池,然后在您不再需要本地自动释放对象时释放它。如果您有一个要创建自动释放对象的 block ,您将通过在 block 的开头创建一个本地自动释放池来确保它们被释放(只需分配/初始化它,不需要魔法)然后在释放池 block 的末端。瞧,池中的对象也被释放了。
自动释放池嵌套,所以如果你这样做,请记住这一点。如果您释放自动释放池,请确保它是最近分配的池,而不是其他池。
关于iPhone 开发 - 内存管理类(class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/464908/