分配NSString

时间:2011-11-10 15:19:08

标签: objective-c

我有一个名为animation的NSString,使用以下(工作)代码调用:

 animation=[rowInDataBase objectAtIndex:2] ;
 NSLog(@"animation:%@",animation);

当我尝试执行以下操作时:

previousAnimation=animation;

上一个动画被指定为ccsprite 当我尝试使用previousAnimation记录NSLog(@"previous-animation:%@",previousAnimation);以检查其值时,应用程序崩溃,除非previousAnimationNULL

在我的任务中我做错了什么?

3 个答案:

答案 0 :(得分:3)

animation需要妥善保留。您应该为animationpreviousAnimation创建一个包含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。