【问题标题】:Memory increase with no release memory内存增加而没有释放内存
【发布时间】:2012-11-30 13:30:33
【问题描述】:

我搜索如何找到我的问题。 在我的 iPad 应用程序中,当我处理数据时,我增加了内存并且从不释放该内存,我尝试仪器泄漏内存但没有发现内存泄漏(我尝试使用配置文件和分析)。

所以我的问题是他们有其他工具来查找内存泄漏或其他方法吗?

提前感谢您的考虑。

P.S:我没有发布代码,因为这涉及我的代码的很大一部分,但内存增加的部分是我从 FTP 下载一些 zip 文件的部分(基于 Apple Doc 中的 SimpleFTPSample)我解压缩这些文件(使用框架 minizip)这个 zip 文件包含一些图像和 XML 文件我解析了这个 XML 文件(大约 7200 个 XML 文件和 35 000 个图像文件保存)我在数据库中保存了一些信息(解析问题)和它。如果你需要我的部分代码来帮助我问我。

【问题讨论】:

  • 就像您自己说的:没有泄漏。你需要停止在一个紧密的循环中分配东西。
  • 您说您正在下载和解析 7,200 个 XML 文件。我假设你会使用循环。
  • 当然我有一个循环,但是如何停止分配,我释放了我创建的所有对象,并且我将@autoreleasepool 用于其他对象,但这并没有释放所有使用的内存,所以我不明白为什么会这样当我用仪器检查内存时增加......
  • 分块处理文件。当您处理完一组数据(可能是 50-100 个文件)后,自行清理、存储、释放一些内存,然后加载下一个块。
  • 我也尝试过,但没用最后到 30MB 我有一个 150MB 的内存,只是没有改变,但仪器没有检测到内存泄漏,这很奇怪吗?

标签: iphone objective-c ios ipad memory-leaks


【解决方案1】:

确定您是否在 Scheme:Diagnostics 中关闭了 Zombies。使用 Zombies 时,不会删除任何记忆。内存泄漏测试应始终在关闭 Zombies 的情况下进行。

【讨论】:

  • 该死的我有僵尸,但只是为了模式运行或影响配置文件模式? (我是这个仪器的小新手......)我尝试在 Zombie 关闭的情况下检查泄漏内存。
  • @user1770436 哈哈,这就解释了。默认情况下,Profile 使用与 Run 相同的配置。您可以在 XCode 的“Product->Edit Scheme...”中检查。您会看到 Profile 方案使用了 Run 构建配置。
【解决方案2】:

这通常发生在您将对象保存在数据结构(例如 NSDictionary、NSArray 等)中时,即使您不再需要它们。使用 Instruments 的 Allocations 检查累积了哪些对象,并检查您保存这些对象实例的代码。

另一个原因可能是长时间运行的线程。 如果您提到的加载和解析是在一个需要很长时间的单个线程中完成的,那么您可能需要在某个循环中执行@autoreleasepool 以强制定期清理临时对象。

这也可能完全没有问题。你说你加载了很多图像。默认情况下,图像由 iOS 缓存,并且仅在需要清理内存时才释放。如果 Instruments“Trace Highlights”显示大量内存使用,但“Allocations”没有,那么这可能是原因。

【讨论】:

  • 即使我发布了 NSArray、NSDictionary 等,也会发生这种情况?如果我在解决我的问题的发布后放置 nil 这个对象?因为我有很多 NSArray 和 NSDictionary 所以你的解释对我来说很有意义。
  • 没有。如果您释放数据结构,那么它们的成员也将被释放(除非它们也被其他地方引用)。
  • 通常我有一个很好的分配和释放原因分析没有发现泄漏问题所以我认为这很好(或者 Xcode 的工具不好^^)。
  • 如果 Instruments Leaks 没有报告泄漏,您很可能没有泄漏。但是“泄漏”是指您保留但不再引用的对象。但是您仍然可以保留不再需要的对象,但仍然可以从某些数据结构中引用。按照我说的运行 Instruments Allocations,看看哪些对象被保留,哪些你不希望被保留。
  • 感谢您的帮助,我正在测试中(下载 700Mo 并解析 7200 xml 文件 + 保存 35 000 个图像)与配置文件泄漏(因此也有分配),我已关闭僵尸就像 ahwulf 说的,显然我的内存被释放了,所以显然没有释放内存是由 NSZombies 选项引起的,我等待测试结束才能说胜利,但这是很好的方式。
猜你喜欢
  • 1970-01-01
  • 2013-06-30
  • 2016-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多