代码是:
if(!spriteInfoBack){
spriteInfoBack = [CCSprite spriteWithFile:@"bg_player.png"];
[spriteInfoBack setAnchorPoint:CGPointMake(0, 1)];
[spriteInfoBack setPosition:CGPointMake(infoLeftX, infoTopY)];
[parent addChild:spriteInfoBack];
}else{
[spriteInfoBack setPosition:CGPointMake(infoLeftX, infoTopY)];
}
崩溃输出为:
[CCSprite setPosition:]: message sent to deallocated instance 0xc59cc70
它位于这条线上:
[spriteInfoBack setPosition:CGPointMake(infoLeftX, infoTopY)];
我认为这很奇怪,因为if(!spriteInfoBack)已经检查了实例是否已释放。
最佳答案
您需要保留CCSprite
。类方法spriteWithFile
返回一个自动释放的对象。存储在spriteInfoBack
中的返回值不属于您。这意味着对象的生存期是直到下一个自动释放池耗尽为止。从您的代码看来,您正在使用spriteInfoBack
进行延迟初始化,然后再使用。您将要做的是保留spriteWithFile
的返回值,如下所示:
spriteInfoBack = [[CCSprite spriteWithFile:@"bg_player.png"] retain];
在将来的某个时刻,您将需要释放
spriteInfoBack
。我看不到该类的其余部分,但是如果spriteInfoBack
是一个类的实例变量,那么在dealloc
中这样做是有意义的。