了解task_basic_info任务resident_size

时间:2013-09-05 17:26:25

标签: ios xcode memory-management memory-leaks automatic-ref-counting

简短问题:某人(来自5)告诉我,我的系统可以回收居民记忆。这是什么意思?这是否意味着我的应用程序没有使用该内存,或者是与我的应用程序当前使用的内存直接相关的驻留内存值?除了那些answers之外,我没有找到太多关于此的文档。

我正在努力解决问题。我正在编写一款适用于iOS 6.0和Cocos2d 2.0的游戏,但我确实遇到了一些内存问题。我有Cococs2d 2.0作为静态库,我使用ARC编写了我的代码(我怀疑是原因)。

从初始场景到角色选择场景再到行星选择场景,最后到游戏场景我观察到内存的resident_size增加。

我在每个场景init添加了this代码,并且我追踪了这些值。下图显示了我的用户体验路径。在左列上有场景名称,在第二列上是正常流程中使用的内存量(不返回到前一场景),在第三列列中有常驻内存值返回和前进来自特定的场景。

enter image description here

我们可以观察到主场景呈现的问题可能与其他场景不同。每次加载场景时,内存增加大约15 MB。

我在场景上运行独立测试(使用重载回调方法),我得到以下值:

enter image description here

有趣的是,在第三次加载后,在CharacterSelection场景上运行相同的测试并没有逐渐增加内存(保持37MB)。但是我不明白为什么最初从27 MB到32 MB而不是37 MB(或者,我应该说,我不明白为什么它从32 MB到37 MB)。

我运行另一组测试试图从一个场景解析到另一个场景,我确实得到了有趣的结果。这是架构:

enter image description here

**某人answered对我说“驻留内存是对已分配给您的应用程序但尚未被系统回收的内存的度量,但部分/大部分居民内存可以由系统回收。

这是否意味着驻留内存值不一定是我的应用程序使用的内存?

根据我的测试,场景与其使用的内存和驻留内存值之间似乎存在相关性。

所以如果这是正确的,我应该继续尝试解决这个问题,因为常驻内存值越高,我的APP就越有可能被杀死。如果系统可以使用内存,那么就不会发生崩溃。鉴于存在崩溃,我认为内存以某种方式泄露。但是泄漏工具没有检测到任何泄漏(这是因为我使用的是XCode 4.5?)。

有什么帮助吗?这与使用ARC有关吗?

1 个答案:

答案 0 :(得分:2)

问题是我在新场景的init方法中测量内存。因此,该报告包括前一场景的资产(因为它尚未被解除分配)。

添加0.1延迟的回调解决了它并回答了我的问题:

问:

  有人(第5章)告诉我,居住的记忆可以被我的回收   系统。这是什么意思?这是否意味着我的应用程序没有使用   那个内存或者是与之直接相关的驻留内存值   我的应用程序当前使用的内存?

它是与我的应用程序使用的内存直接相关的内存。在this function的回调中使用延迟加上对[[CCTextureCache sharedTextureCache] dumpCachedTextureInfo];的调用将确认这一点。

问:

  

有任何帮助吗?这与使用ARC有关吗?

幸好不是在这种情况下。在某些场景中还有其他问题导致泄漏。例如,起始场景是另一个场景的子类。这个起始场景有一些子节点被添加为子节点,在场景的清理方法中没有被删除。添加显式删除这些子节点解决了这个问题。我不确定为什么这是必要的(我希望自动删除所有子节点)但它解决了这个问题。