【问题标题】:Estimating memory usage of Cocos2d game估计 Cocos2d 游戏的内存使用情况
【发布时间】:2013-03-12 13:36:03
【问题描述】:

我正在使用启用 ARC 的 Cocos2d 2.0。我的游戏是随机生成的游戏,所以我需要在游戏中间的场景中加载/卸载纹理(spritesheet-batchnode)。我正在尝试从文件中删除 spriteframes 并删除我希望在中间卸载的 spritesheet 的键纹理。当我在卸载工作表后使用 dumpcachedtextureInfo 时,该 spritesheet 纹理不会显示在 dumpcachedtextureinfo 的日志中。

但是当我使用 Instruments/activity monitor 来分析我的应用程序时,卸载纹理和 spritesheet 后实际内存使用量不会下降。

有没有办法使 dumpcachedtextureinfo 不会显示仍在内存中的纹理? 此外,分配中的我的 livebytes 列显示 4 MB。

正如我在不同的地方读到的,分配不显示纹理内存。

所以我的分配实时字节列显示为 4 MB,我的总纹理内存(如 dumpcchedtextureinfo 日志所示)显示为 84MB,但内存监视器仍然显示实际内存使用量为 84+Spritesheet 大小+实时字节

我无法理解这种区别?

我没有退出场景,所以我不确定ARC是持有内存还是什么?

【问题讨论】:

  • 由于您已经在使用 Instruments,请检查是否有任何大块内存仍在“活动”并且可能已泄漏。除此之外,也许您正在查看永远不会减少的总分配列。
  • 我担心活动监视器下的“实际内存使用情况”指标。即使在卸载后它也不会减少。我不明白这是为什么?

标签: memory-management cocos2d-iphone automatic-ref-counting instruments


【解决方案1】:

给你一些有用的笔记

  • 要检查内存泄漏,请使用:Instrument-> Leaks

【讨论】:

  • 我已经浏览了该链接,是的,它非常有帮助。我的问题不是优化内存。我的问题是知道我的应用在某个时间实例使用的确切内存。
  • 在仪器中你可以看到...希望你知道:-
  • 还有:选择分配,对象列表。搜索类名(即 CCTexture2D)。如果它旁边有一个点,它仍然存在(在内存中)。看看从缓存中删除 tex 时是否会发生变化。
  • 我检查了 allocations-objectlist-cctexture2d。我看到在 cctextue2d 对象下创建的活动对象的堆栈跟踪。在那里我可以看到我加载 spritesheet 的方法。 Real Memory 向我显示了总大小,包括我正在卸载的纹理以及未显示在 dumptexturecacheinfo 中的纹理。使用 ARC 是否足以释放纹理?如果我没有退出现场,ARC 是如何释放东西的?我在游戏场景中。这在我启用 ARC 并迁移到 ARC 之后开始。我可能会错过什么?
  • 如果我创建一些精灵和动画,并对它们运行一些动作。稍后在游戏中,我需要卸载具有这些精灵的纹理,我删除这些精灵,removeanimationbyname 并删除纹理。我还需要做些什么来卸载吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-01
  • 1970-01-01
  • 2010-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多