を割り当てます。 previousAnimation
がNULL
私は、次の(作業)コードと呼ばれる、NSStringのは、アニメーションと呼ばれていNSStringの
でない限り、私は、NSLog(@"previous-animation:%@",previousAnimation);
とアプリケーションがクラッシュし、その値をチェックするために、ロギングpreviousAnimation
にしようとすると
私は自分の割り当てで間違って何をしているのですか?
を割り当てます。 previousAnimation
がNULL
私は、次の(作業)コードと呼ばれる、NSStringのは、アニメーションと呼ばれていNSStringの
でない限り、私は、NSLog(@"previous-animation:%@",previousAnimation);
とアプリケーションがクラッシュし、その値をチェックするために、ロギングpreviousAnimation
にしようとすると
私は自分の割り当てで間違って何をしているのですか?
文字列をコピーしようとしていますか?もしそうなら、あなたはやるべきこと:
NSString* previousAnimation = [NSString stringWithString:animation]; // autoreleased
または
NSString* previousAnimation = [animation copy]; // retain count 1, need to release
をそうでなければ、
previousAnimation = [animation retain];
を保持し、作業が完了したときにpreviousAnimationを解放する必要があります。
ありがとう、私は[アニメーションコピー]した。 、それは働いて、私もstringWithStringを試していたが、クラッシュします。なぜコピーをする必要があるのですか?プロパティとは何が違うのですか? – Curnelious
コード行の次にコメントがあるので、stringWithStringは自動解放されたオブジェクトを返しますが、copyは自分自身を解放する必要がある保持されたオブジェクト(retainCount 1)を与えます。 stringWithStringでクラッシュする理由は、おそらくそれがリリースされることを期待していない間にリリースされていることでしょう。 – jbat100
animation
を正しく保持する必要があります。 animation
とpreviousAnimation
のretain属性を持つプロパティを作成し、このように設定する必要があります。
self.animation = [rowInDatabase objectAtIndex:2];
...
self.previousAnimation = self.animation;
これで、コールの間に両方の値が適切に保持されるため、クラッシュする問題はなくなりました。両方の値をdealloc
にリリースすることを忘れないでください。
ありがとうございます。あなたはなぜ私がそのnsstringのケースでプロパティを行う必要があるのかをすぐに理解するのを助けることができますか?私はそのことを理解できませんでした。どうもありがとう 。 – Curnelious
すでにリリースされている変数を割り当てているように聞こえるので、メモリは他のランダムオブジェクト(この場合はccspriteオブジェクト)によって再利用されます。しかし、より多くの文脈でコードを見ることなく確実に伝えるのは難しいです。
これらの2つのステートメントは、同じ方法または異なる方法ですか?彼らはどちらもいつ実行されますか? – jrturton