好吧,我很困惑,所以我希望你的朋友可以帮助我。我正在使用Cocos2D开发一个项目,这是最新版本(.99 RC 1)。我制作一些玩家物品和一些按钮来改变物体的生命。但奇怪的是,当我试图将生命改变-5时代码崩溃了。或者除了-1之外的任何负值。
直接前进,但是当NSnumber为-5时,它甚至没有被调用,它在NSlog语句中崩溃。那么......那是怎么回事?
通过更好地保留变量解决了这个问题。谢谢!
答案 0 :(得分: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];
}
查看您的代码并了解alloc / copy / retain如何与release / autorelease保持平衡。乍一看,你真的搞乱了内存管理。
答案 1 :(得分:1)
好吧,部分问题是您没有在任何地方使用“self.lifeChange”符号,这意味着您永远不会保留分配给lifeChange
属性的NSNumber对象。这意味着NSNumber对象可能会随机死亡。
更改为self.lifeChange
,看看是否有帮助。