2011-11-10 5 views
0

を割り当てます。 previousAnimationNULL私は、次の(作業)コードと呼ばれる、NSStringのは、アニメーションと呼ばれていNSStringの

でない限り、私は、NSLog(@"previous-animation:%@",previousAnimation);とアプリケーションがクラッシュし、その値をチェックするために、ロギングpreviousAnimationにしようとすると
私は自分の割り当てで間違って何をしているのですか?

+1

これらの2つのステートメントは、同じ方法または異なる方法ですか?彼らはどちらもいつ実行されますか? – jrturton

答えて

1

文字列をコピーしようとしていますか?もしそうなら、あなたはやるべきこと:

NSString* previousAnimation = [NSString stringWithString:animation]; // autoreleased 

または

NSString* previousAnimation = [animation copy]; // retain count 1, need to release 

をそうでなければ、

previousAnimation = [animation retain]; 

を保持し、作業が完了したときにpreviousAnimationを解放する必要があります。

+0

ありがとう、私は[アニメーションコピー]した。 、それは働いて、私もstringWithStringを試していたが、クラッシュします。なぜコピーをする必要があるのですか?プロパティとは何が違うのですか? – Curnelious

+0

コード行の次にコメントがあるので、stringWithStringは自動解放されたオブジェクトを返しますが、copyは自分自身を解放する必要がある保持されたオブジェクト(retainCount 1)を与えます。 stringWithStringでクラッシュする理由は、おそらくそれがリリースされることを期待していない間にリリースされていることでしょう。 – jbat100

3

animationを正しく保持する必要があります。 animationpreviousAnimationのretain属性を持つプロパティを作成し、このように設定する必要があります。

self.animation = [rowInDatabase objectAtIndex:2]; 
... 
self.previousAnimation = self.animation; 

これで、コールの間に両方の値が適切に保持されるため、クラッシュする問題はなくなりました。両方の値をdeallocにリリースすることを忘れないでください。

+0

ありがとうございます。あなたはなぜ私がそのnsstringのケースでプロパティを行う必要があるのか​​をすぐに理解するのを助けることができますか?私はそのことを理解できませんでした。どうもありがとう 。 – Curnelious

1

すでにリリースされている変数を割り当てているように聞こえるので、メモリは他のランダムオブジェクト(この場合はccspriteオブジェクト)によって再利用されます。しかし、より多くの文脈でコードを見ることなく確実に伝えるのは難しいです。

関連する問題