Cocos2d iphone 理解sprite表内存消耗

Cocos2d iphone 理解sprite表内存消耗,cocos2d-iphone,sprite-sheet,ccspritebatchnode,Cocos2d Iphone,Sprite Sheet,Ccspritebatchnode,我想知道每一行标记的代码是如何影响内存消耗的。考虑到我的精灵表在内存中占用了4MB CCSpriteBatchNode *spritesBgNode; // Line 1 spritesBgNode = [CCSpriteBatchNode batchNodeWithFile:@"sprites.pvr.ccz"]; // Line 2 [self addChild:spritesBgNode]; // Line 3 [[CCSpriteFrameCache sharedSpri

我想知道每一行标记的代码是如何影响内存消耗的。考虑到我的精灵表在内存中占用了4MB

CCSpriteBatchNode *spritesBgNode;      // Line 1
spritesBgNode = [CCSpriteBatchNode batchNodeWithFile:@"sprites.pvr.ccz"]; // Line 2
[self addChild:spritesBgNode];    // Line 3
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"sprites.plist"]; // Line 4

sprite1 = [CCSprite spriteWithSpriteFrameName:@"sprite1"];  // Line 5
[spritesBgNode addChild:sprite1]; // Line 6 

[spritesBgNode addChild:sprite1]; // Line 7 

[spritesBgNode addChild:sprite1];  // Line 8

[spritesBgNode removeChild:sprite1]; // Line 9

[spritesBgNode removeSpriteFramesFromFile:@"sprites.plist"]; // line 10

[self removeChild: spritesBgNode]; // Line 11
i) 4MB精灵工作表从哪一行开始消耗内存

ii)第5行是否会导致额外的内存消耗

iii)在第8行(再次添加第7行)的情况下会发生什么,它如何影响记忆

iv)第9行和第10行如何影响内存消耗?他们释放内存吗

v) 如果批处理节点暂时不使用,第11行是否可取?以后再添加它的含义是什么。

i)Spritesheet在加载到内存时会消耗内存。由于coco2d是一个开源框架,您可以检查代码,您将看到,spritesheet是在
batchNodeWithFile:
call之后添加到内存中的。In将把它添加到此方法内的缓存中

ii)第5行返回简单的自动释放对象。这是objective-c中的常见做法。对象将在勾号的ent处由释放池自动释放。这意味着,如果不保留该对象,该对象将被销毁,例如,通过将其作为子节点添加到其他节点

iii)不能添加两次子对象。如果您尝试添加的节点的父节点不是
nil
,则会导致断言。正如我前面所说,您可以在CCNode类的代码中看到它

iv)纹理加载到内存后,所有精灵都非常轻量级,因为任何精灵只需使用指向纹理某个部分的链接即可绘制纹理。因此,您将释放一点内存,但仍然可以看到4MB+

v) 从父节点中移除任何节点后,即使对象被破坏,其纹理仍将加载到内存中。可以通过调用卸载此纹理

[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames];
[[CCTextureCache sharedTextureCache] removeUnusedTextures];

此外,如果使用某些动画,可以将其从CCAnimationCache中删除。无论如何,如果你没有内存问题,我可以不从内存中卸载纹理。加载纹理是最长的过程,因此从卸载的纹理绘制spriteframe之前会有延迟,因为它将再次加载

如果你想知道精确的行和字节,你应该使用仪器。纹理占用了99%的内存,其他行最多增加了几百个字节。可能是在这种情况下,以模仿提问者编程能力的注释开头的答案不受欢迎?