1

好吧,我很困惑,所以希望各位朋友能帮帮我。我正在使用最新版本 (.99 RC 1) 的 Cocos2D 进行项目。我制作了一些玩家对象和一些按钮来改变对象的生命。但奇怪的是,当我尝试将他们的生活更改为 -5 时,代码会崩溃。或者除-1之外的任何负值。

直截了当,但是当 NSnumber 为 -5 时,它甚至没有被调用,它在 NSlog 语句中崩溃。那么……这是怎么回事?

通过更好地保留变量来解决它。谢谢!

4

2 回答 2

2

好的。我会再说一遍。访问者是你的朋友。使用它们。总是。注意:是的,我知道 Apple 建议不要在 init 和 dealloc 中使用它们,但在 15 年内,这从来没有对我造成过问题,也没有使用它们。在这种情况下。有时您不想使用它们,但这些时间远少于您想要使用它们的时间。)

在您的 buttonText 方法中:

- (void)buttonText:(int)number 
{
    lifeChange = [NSNumber numberWithInt:number];
    NSString *text = [[NSString alloc] initWithFormat:@"%d", number];
    CCLabel *label = [CCLabel labelWithString:text fontName:@"Times New Roman"                                        fontSize:20];
    label.position = CGPointMake(35, 20);
    [self addChild:label];

 }

你应该做一个:

- (void)buttonText:(int)number 
{
    NSString *text = [[[NSString alloc] initWithFormat:@"%d", number] autorelease];
    CCLabel *label = [CCLabel labelWithString:text fontName:@"Times New Roman"                                        fontSize:20];

    [self setLifeChange:[NSNumber numberWithInt:number]];
    label.position = CGPointMake(35, 20);
    [self addChild:label];

 }

查看您的代码并了解分配/复制/保留需要如何与发布/自动释放进行平衡。乍一看,你真的搞砸了内存管理。

于 2010-03-20T20:27:48.990 回答
1

好吧,您的部分问题是您没有在任何地方使用符号“self.lifeChange”,这意味着您分配给该lifeChange属性的 NSNumber 对象永远不会保留。这意味着 NSNumber 对象可能会随机死亡。

更改self.lifeChange并查看是否有帮助。

于 2010-03-20T20:25:19.250 回答