gpt4 book ai didi

objective-c - iOS:为什么这个实例被释放?

转载 作者:行者123 更新时间:2023-11-29 13:42:25 25 4
gpt4 key购买 nike

代码是:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com