iPhone 开发 - 内存管理类(class)

标签 iphone memory performance

我需要学习内存管理。我有一个使用多个 View (大约 10 个)的应用程序,其中一些附加到选项卡 Controller 。问题是我正在使用图像(我从 Web 服务加载的许多图像)。我面临以下问题。

  1. 当我在表格 View 中滚动时内存不断增加(为什么?) - 我检查了 Apple 网站上的 CustomTableViewCell 应用程序,当我使用 Instruments 运行它时,它显示了相同的迹象。

  2. 我正在对许多对象使用自动释放,但我发现这些对象实际上并没有被释放并且内存已连接。我怎样才能摆脱这些对象?

  3. 如何告诉 NSAutoreleasePool 定期释放未使用的对象?我认为这可以帮助我摆脱有线内存。但我可以这样做吗?

Apple 或其他人是否有任何示例(书籍或在线文章)解释如何使用 Instruments(通过示例详细说明?)以及微调应用程序的内存和性能?

谢谢。

最佳答案

既然我们对自动释放有了“直接说不”的答案,我想我会添加一个关于如何更有效地使用自动释放的提示。不管是好是坏,并​​不是每个人都会完全避免自动释放——如果没有其他原因,只是因为 Apple 提供了许多方便的方法来交给你自动释放的对象。

您不能只告诉自动释放池释放您不使用的任何对象。没有垃圾回收,它怎么知道?

您可以做的是创建一个本地自动释放池,然后在您不再需要本地自动释放对象时释放它。如果您有一个要创建自动释放对象的 block ,您将通过在 block 的开头创建一个本地自动释放池来确保它们被释放(只需分配/初始化它,不需要魔法)然后在释放池 block 的末端。瞧,池中的对象也被释放了。

自动释放池嵌套,所以如果你这样做,请记住这一点。如果您释放自动释放池,请确保它是最近分配的池,而不是其他池。

关于iPhone 开发 - 内存管理类(class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/464908/

相关文章:

iphone - 在 iOS Safari 上更改方向时出现白色闪烁

iphone - 针对为第三方应用程序开发人员构建的 API 进行用户身份验证

iphone - 如何同时播放iPod库中的两个音频文件?

java - 使用 + 运算符分配字符串内存

php - curl上传多个php ://memory files?

iphone - NSString 中不同类型的 UTF8 解码

iphone - NSMutableString appendString 的内存泄漏

javascript - 在nodejs中定义模块变量的最佳方法是什么?

php - C & MySql 或 PHP & MySql 哪个更快?

c++ - F# 性能 : What is making this code so slow?