【问题标题】:Cocos2d: is there a way to know which images are still loaded in memory?Cocos2d:有没有办法知道哪些图片还加载在内存中?
【发布时间】:2013-09-10 09:30:48
【问题描述】:

我正在使用 Cocos2d 2.0 和 XCode 4.5.2,我确实想知道 如何检测在特定时间哪些 spritesheets/图像仍在内存中。

示例: 在场景中,我加载 images.pvr.ccz spritesheet,然后调用 replaceScene 加载 Scene2。在 Scene2 运行时,我想查看 images.pvr.ccz 是否仍在内存中作为 resident memory increases at each scene.

我应该使用一些仪器工具还是应该在纹理缓存相关的类中添加一些断点?

我确实将图像添加到 frameCache,如下所示:

 [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"images.plist"];
        batchNode = [CCSpriteBatchNode batchNodeWithFile:@"images.pvr.ccz"];
        [self addChild:batchNode]; 

其他详细信息 - 不需要

我有以下行为:每次替换场景时,内存都会增加“x”MB,这可能对应于 spritesheet 大小。

我在每个场景的 init 方法中添加了这些调用,但是内存仍然增加:

    [CCAnimationCache purgeSharedAnimationCache];
    [CCShaderCache purgeSharedShaderCache];
    [[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames];

【问题讨论】:

    标签: ios cocos2d-iphone


    【解决方案1】:
    [[CCTextureCache sharedTextureCache] dumpCachedTextureInfo];
    

    使用此调用查看当前加载到内存中的纹理。此外,如果您想删除未使用的纹理,请使用

    [[CCTextureCache sharedTextureCache] removeUnusedTextures];
    

    【讨论】:

    • 我真的不明白。我添加了调用,我得到了 1 个使用 8MB 的纹理,但是,查看常驻内存信息,每次加载场景时我都会增加 8MB(因此每次都会以某种方式重新加载纹理)。我迷路了.. :(
    • 纹理只加载到内存中一次。你确定你的内存是因为纹理而泄露的吗?没有加载大量数据、声音或其他内容?
    • 我添加了一个CCLOG来在dumbInfo上打印textKey,并且之前场景的spritesheet被缓存了。我想这应该可以解释部分内存增加。但是我不知道如何强制将其删除。
    • 确保在替换场景后,之前场景中的所有对象都已销毁。
    • 我添加了“[[CCTextureCache sharedTextureCache] removeAllTextures];”并且纹理表被删除,但内存保持不变。我想这需要按照你在第二条评论中的建议调查其余部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    相关资源
    最近更新 更多