2009-07-22 4 views

答えて

3

関心がなくなったポインタをnilに設定することをお勧めします。 -deallocにアクセサーの副作用(投稿通知やKVOなど)がある可能性があるため、このようなアクセサの使用を推奨していませんが、それは議論の余地があり、Appleは独自のコードで一貫していません。いずれにせよ、あなたの指針を捨てることは良い習慣です。それは確かに問題を引き起こすことはありません。あなたのポインタをゼロにする習慣が-deallocになると、将来の重要なバグが保存されます。

この特定のケースでは、必要ではないかもしれませんが、どのような問題が示唆されていますか?

+1

私はそれが必要かどうか疑問に思っていたので、未知のバグや多くの頭痛を避けることができました。私が混乱していることの1つは、変数の割り当て方法です。私はself.fooをnilに割り当てると、それに割り当てられた他の仮説変数もnilに設定されないと思いましたか?私は問題を説明するのに苦労していますので、わかったら教えてください:) – Meroon

+1

インスタンス変数foo(この場合はself.fooを返しますが、このコードからはわかりません)はaですオブジェクトへのポインタ。これをnilに設定すると、オブジェクト(またはそのオブジェクトを指すポインタ)を変更するのではなく、ポインタを移動しています。あなたは将来の頭痛やバグを回避しようとしています。なぜなら、deallocですべてのivarポインタを設定しなくてはならない(あなたが保持しているものを解放するだけでなく)のが習慣になっている理由です。 –

2

合成されたアクセサだと仮定すると、deallocでそれを行うことには意味がありません。以前は、もうオブジェクトと話をしたくない場合は、それを無視することがあります。私はそれが問題を引き起こす方法を見ることができません。

合成されたアクセサでない場合、セッターは何らかの方法で逆の関係に影響を与える可能性があります。その場合は、fooにはもう周りにいないことを伝えるためにそれをnilに設定する必要があります。

3

assignプロパティの-iallocにivarをnilに設定する必要はありません。

-deallocでivarをnilに設定するのは無害です。パブリックアクセサを使用して、dealloc([self setFoo:nil]またはself.foo = nil)のプロパティをnilに設定すると、望ましくない副作用が生じる可能性があります。

関連する問題