我试图理解为什么乐器会说下面代码中的指示行导致内存增长。我在返回基线状态后的第二次堆中(在基线之后)得到了这个。有谁可以指出我的错误?
CCSprite *baseSprite = NULL;
CCSprite *mainHandSprite = NULL;
CCSprite *offHandSprite = NULL;
CCSprite *helmetSprite = NULL;
CCSprite *torsoSprite = NULL;
CCSprite *gloveSprite = NULL;
CCSprite *bootSprite = NULL;
NSString* afile = [NSString stringWithFormat:@"%@%i.PNG", file, num];
baseSprite = [[CCSprite alloc]initWithFile:afile]; /* HEAP GROWTH */
baseSprite.anchorPoint = ccp(0,0);
int w = baseSprite.textureRect.size.width;
int h = baseSprite.textureRect.size.height;
mainHandSprite = [self mainHandSprite:file And:num];
helmetSprite = [self headSprite:file And:num];
torsoSprite = [self torsoSprite:file And:num];
offHandSprite = [self shieldSprite:file And:num];
gloveSprite = [self gloveSprite:file And:num];
bootSprite = [self bootSprite:file And:num];
CCRenderTexture *rt = [CCRenderTexture renderTextureWithWidth:w height:h]; /*HEAP GROWTH */
[rt begin];
[baseSprite visit];
if (torsoSprite)
[torsoSprite visit];
if (helmetSprite)
[helmetSprite visit];
if (offHandSprite)
[offHandSprite visit];
if (bootSprite)
[bootSprite visit];
if (gloveSprite)
[gloveSprite visit];
if (mainHandSprite)
[mainHandSprite visit];
[rt end];
CCTexture2D *aTex = rt.sprite.texture;
[aTex setAntiAliasTexParameters];
[baseSprite release];
baseSprite = NULL;
[mainHandSprite release];
mainHandSprite = NULL;
[torsoSprite release];
torsoSprite = NULL;
[helmetSprite release];
helmetSprite = NULL;
[offHandSprite release];
offHandSprite = NULL;
[gloveSprite release];
gloveSprite = NULL;
[bootSprite release];
bootSprite = NULL;
return aTex;
答案 0 :(得分:0)
该消息只是说明创建实例的位置而不是泄漏的位置。
变量baseSprite
保留在其他位置而没有平衡释放。
对于rt
,CCRenderTexture
返回一个未自动释放的对象,或者该变量在没有平衡释放的情况下保留在其他位置。
如果您需要查看对象使用仪器的保留,释放和自动释放的位置:
在仪器中运行,在分配中设置“记录参考计数”(您必须停止记录以设置选项)。导致问题代码运行,停止记录,搜索感兴趣的ivar,向下钻取,您将能够看到所有保留,释放和自动释放发生的位置。