gpt4 book ai didi

cocos2d-iphone - 设备 (iPhone/iPad) 上的 Cocos2d/Box2d 应用程序内存警告

转载 作者:行者123 更新时间:2023-12-02 22:15:24 25 4
gpt4 key购买 nike

这是 Xcode 中 profile->leaks 的信息,我在 iPad 2 上运行它大约 21 分 12 秒后崩溃。

实时字节 ---- 5.45 MB

生活----13547

暂时的 ---- 3845036

总字节数 -- 720.31 MB

当应用程序在设备上运行时,应用程序崩溃并在控制台打印Received Memory Warning

我不太确定它是如何工作的。

但请告诉我,如果某个应用在设备上运行了 21 分钟,在此运行期间总共使用了大约 720 MB 的内存,但事件字节永远不会超过 7.0 MB。

我接受该应用程序开始时使用 3.25 MB 作为事件字节,并且在此运行期间它的事件字节增加到 5.45 MB,我不太确定事件字节如何继续像这样增加。

但我的问题是:

它是否是一个糟糕到足以在设备上运行时产生崩溃的应用程序?

或者

我是否遇到了其他问题?

最佳答案

您可能会在 CCTextureCache 单例中留下大量 Sprite 。每次创建 CCSprite 时,纹理都会被缓存(静默地),以便您下次引用它时,加载和呈现会更快(快得多)。在模拟器中运行分配分析(见下面两张图片):

THIS RUN IN DEVICE

This run in simulator

上图来自设备上的分配分析。最大内存 4.4 Mb。

底部图像是相同的应用程序,相同的游戏序列,同时在模拟器中进行分析(峰值约为 78 Mb)。通过在模拟器中运行,我可以在分配中看到我的 Sprite 使用的内存。在设备中,分配工具不考虑此内存。

您正在寻找趋势和离散的大跃进。如果您再也没有回来,您可能会留下未使用的 Sprite 。在我的例子中,我选择在游戏执行的特定点从纹理中释放特定资源。这是来自 appController 的示例

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
MPLOGERROR(@"Before purge");
[[CCTextureCache sharedTextureCache] dumpCachedTextureInfo];

[CCAnimationCache purgeSharedAnimationCache];
[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFrames];
[[CCDirector sharedDirector] purgeCachedData];

MPLOGERROR(@"%After purge");
[[CCTextureCache sharedTextureCache] dumpCachedTextureInfo];

}

这是最后一搏,暴力清理。但是您可以在玩游戏的不同时间点移除特定纹理,而不会影响应用程序的“感知”响应能力。缓存在原则上通常是合理的,但在资源受限的情况下可能会迅速变得棘手。了解它、进行实验,最终您会找到“保留什么/删除什么”的正确组合,以实现流畅的应用程序性能。

附言。尽管模拟器对于某些测试来说很好,但不要将其“性能”用作基准。模拟器性能在图形方面毫无意义,它不使用您计算机的 GPU(这就是为什么您会看到图形内存分配 :))。

关于cocos2d-iphone - 设备 (iPhone/iPad) 上的 Cocos2d/Box2d 应用程序内存警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14560405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com