3

简短问题:某人(引用号5)告诉我,驻留内存可以被我的系统回收。这是什么意思?这是否意味着我的应用程序没有使用该内存,或者是与我的应用程序当前使用的内存直接相关的驻留内存值?除了那些answers以外,我还没有找到太多的文档。了解task_basic_info任务resident_size

我想解决一个问题。我正在编写iOS 6.0和Cocos2d 2.0的游戏,我确实遇到了一些内存问题。我将Cococs2d 2.0作为静态库,并使用ARC编写我的代码(我怀疑是这个原因)。

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

我在每个场景init处添加了this代码,我追踪了这些值。下图显示了我所做的用户体验路径。在左边的柱子上有场景名称,第二柱在正常流中使用的内存量(不回到前一场景),在第三块柱中有驻留内存的值往返从特定的场景。

enter image description here

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

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

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

需要说明的是,Instruments是否仍然说,与常驻内存相比,您的应用的“实时字节数”非常小?泄漏仪器报告没有泄漏?如果是这样,我会尝试的下一件事是明确要求分配仪器查看各种场景对象的活动实例的数量。 (我假设当你进入下一个场景时,应该释放前一个场景,并且有一些主场景类包含进入场景的所有内容。)我怀疑你正在泄漏场景和乐器只是不报告这些泄漏。 –

+0

@AaronGolden谢谢亚伦,就是这样。好建议。我会尝试一下,更新一个评论,如果它有效接受答案(所以你可以添加这个作为编辑,如果你觉得)。再次感谢您的支持:) – mm24

回答

2

问题是我在新场景的init方法中测量内存。因此报告包括了前一幕的资产(因为它还没有被撤销)。

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

问:

人(CIT 5)告诉我,常驻内存可以通过我的 系统被回收。这是什么意思?这是否意味着我的应用程序不使用内存,或者是与我的应用程序当前使用的内存直接相关的常驻内存值?

答:

它是正在使用我的应用程序直接关系到这些内存。使用this function的回拨延迟以及[[CCTextureCache sharedTextureCache] dumpCachedTextureInfo];的电话将确认这一点。

问:

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

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