简短问题: 某人(引用。5)告诉我,我的系统可以回收常驻内存。这是什么意思?这是否意味着我的应用程序没有使用该内存,或者常驻内存值与我的应用程序当前使用的内存直接相关?除了那些 answers 之外,我没有找到太多关于此的文档。
我正在尝试解决一个问题。我正在使用 iOS 6.0 和 Cocos2d 2.0 编写游戏,但确实遇到了一些内存问题。我有 Cococs2d 2.0 作为静态库,我使用 ARC 编写代码(我怀疑这是原因)。
从初始场景到角色选择场景,然后是行星选择场景,最后是游戏场景,我观察到内存的 resident_size 增加了。
我在每个场景初始化时添加了 this 代码,并跟踪了这些值。下图是我做的用户体验路径。左侧列是场景名称,第二列是正常流程中使用的内存量(不返回前一个场景),第三列是驻留内存的值来回移动从特定场景。
正如我们可以观察到的,主场景呈现的问题可能与其他场景不同。每次加载场景时,内存都会增加大约 15 MB。
我在现场运行了一个独立的测试(使用重新加载回调方法),我得到以下值:
有趣的是,在 CharacterSelection 场景上运行相同的测试并没有在第三次加载后逐渐增加内存(保持 37MB)。但是我不明白为什么最初从 27 MB 变为 32 MB 而不是 37 MB(或者,我应该说,我不明白为什么它会从 32 MB 变为 37 MB)。
我运行另一组测试试图从一个场景解析到另一个场景,我确实得到了有趣的结果。这是架构:
**有人 answered 对我说“驻留内存是对已分配给您的应用程序且尚未被系统回收的内存的度量,但部分/大部分驻留内存可以被系统回收。”
这是否意味着常驻内存值不一定是我的应用程序使用的内存?
根据我的测试,场景与其使用的内存和常驻内存值之间似乎确实存在相关性。
所以如果这是正确的,我应该继续尝试解决这个问题,因为驻留内存值越高,我的 APP 就越有可能被杀死。相反,如果内存可供系统使用,则不会发生崩溃。鉴于存在崩溃,我认为内存以某种方式泄漏。但是,泄漏工具没有检测到任何泄漏(这是因为我使用的是 XCode 4.5 吗?)。
有什么帮助吗?这与使用ARC有关吗?
最佳答案
问题是我在新场景的 init 方法中测量了内存。因此,该报告包括了前一场景的 Assets (因为它尚未被解除分配)。
添加一个 0.1 延迟的回调解决了它并回答了我的问题:
问:
A:
它是与我的应用程序使用的内存直接相关的内存。在 this function 的回调中使用延迟加上对 [[CCTextureCache sharedTextureCache] dumpCachedTextureInfo]; 的调用将确认这一点。
问:
A:
幸运的是,在这种情况下不是。还有其他问题导致某些场景泄漏。例如,起始场景是另一个场景的子类。这个起始场景有一些子节点被添加为子节点,这些子节点在场景的清理方法中没有被删除。添加显式删除这些子节点解决了这个问题。我不确定 为什么这是必要的 (我期望自动删除所有子节点)但它解决了这个问题。
关于ios - 了解 task_basic_info 任务 resident_size,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18642421/