我有一个名为animation的NSString,使用以下(工作)代码调用:
animation=[rowInDataBase objectAtIndex:2] ;
NSLog(@"animation:%@",animation);
当我尝试执行以下操作时:
previousAnimation=animation;
上一个动画被指定为ccsprite
当我尝试使用previousAnimation
记录NSLog(@"previous-animation:%@",previousAnimation);
以检查其值时,应用程序崩溃,除非previousAnimation
为NULL
在我的任务中我做错了什么?
答案 0 :(得分:3)
animation
需要妥善保留。您应该为animation
和previousAnimation
创建一个包含retain属性的属性,并将其设置为这样。
self.animation = [rowInDatabase objectAtIndex:2];
...
self.previousAnimation = self.animation;
现在两个值都将在调用之间正确保留,您将不再遇到崩溃问题。请记住在dealloc
中发布这两个值。
答案 1 :(得分:1)
听起来你正在分配一个已经被释放的变量,所以内存被其他一些随机对象重用(在你提到的情况下,也许是一个ccsprite对象)。但是如果不在更多情况下看到代码,就很难确定。
答案 2 :(得分:1)
您是否正在尝试复制字符串?如果是这样,你应该这样做:
NSString* previousAnimation = [NSString stringWithString:animation]; // autoreleased
或
NSString* previousAnimation = [animation copy]; // retain count 1, need to release
否则你应该保留
previousAnimation = [animation retain];
并在完成后释放previousAnimation。