代码是:
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
中这样做是有意义的。
关于objective-c - iOS:为什么这个实例被释放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8709356/