【问题标题】:Different behaviour for allocations instruments (with and without zombie-mode)分配工具的不同行为(有和没有僵尸模式)
【发布时间】:2011-09-27 07:22:12
【问题描述】:

我在 iOS 中的内存管理或更精确地监控复杂的内存使用情况方面非常苦恼。

所以实际上我想知道在僵尸模式中提供的分配工具(当我在寻找僵尸时)和一般的“正常”分配工具(可从内存->分配中选择)。

如果我正在搜索 Zombies,分配工具会向我显示当前分配的完全不同数量的存储空间(实时字节)。每次点击我的 UI 时,活动字节都会增加很多。

但是在正常的分配窗口(内存->分配)中,一切似乎(几乎绝对)都很好。因此,分配了 1.13 MB 的活动字节,但这是分配的最大字节数,与上面的描述相比,我可以通过点击我的 UI 达到 4-5 MB。所以这对我来说真的很奇怪。

在 Zombies->Allocations 中是否有更多计数在正常分配窗口中不被考虑?

注意:我的程序中没有僵尸和泄漏。

【问题讨论】:

    标签: ios monitoring instruments xcode-instruments allocation


    【解决方案1】:

    据我了解 Zombies 功能,它被视为与 Instruments 中的泄漏和对象分配互斥。

    事实上,当您启用僵尸(Instruments 或 NSZombies 指令)时,会发生对象的“正常”保留循环被欺骗,以便您可以检测到使用已被释放的对象的尝试。从某种意义上说,我不知道有关它的详细信息,但这就像如果保留计数增加一,并且当保留计数变为 1 时,您会收到有关尝试使用已释放实例的错误. 事实上,如果保留计数可能变为零,则对象将被释放,并且在大多数情况下无法检测到重用尝试,因为它可能在释放后很长时间发生,并且该块内存可能已经重新分配给其他对象。因此,保留计数的人为增加将有助于让对象在其“将是”解除分配中幸存下来;当保留计数变为 1 时,会在对象中设置一个标志,以便运行时知道它正在尝试向“将”释放的对象发送消息,并且您会收到完整的错误消息。

    这只是我的心理模型,但它让我可以解释为什么启用僵尸时内存分配要高得多(即,因为对象没有像正常情况下那样被释放)。

    【讨论】:

    • 嗯,好的,感谢您对此的分享想法。据我了解,我应该始终查看“正常”分配窗口。所以,这让我很开心。我想到了在编程过程中发生的大内存错误;-)。
    猜你喜欢
    • 2012-08-21
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    相关资源
    最近更新 更多