:それが保持されていない場合割り当てられた変数をゼロにする必要がありますか?私は時々、この参照いくつかのコードでは
@property (nonatomic, assign) NSObject *foo;
...
-(void)dealloc
{
self.foo = nil;
...
}
は、そのオブジェクトをnilに本当に必要ですか?これは実際に問題を引き起こしませんか?
:それが保持されていない場合割り当てられた変数をゼロにする必要がありますか?私は時々、この参照いくつかのコードでは
@property (nonatomic, assign) NSObject *foo;
...
-(void)dealloc
{
self.foo = nil;
...
}
は、そのオブジェクトをnilに本当に必要ですか?これは実際に問題を引き起こしませんか?
関心がなくなったポインタをnilに設定することをお勧めします。 -dealloc
にアクセサーの副作用(投稿通知やKVOなど)がある可能性があるため、このようなアクセサの使用を推奨していませんが、それは議論の余地があり、Appleは独自のコードで一貫していません。いずれにせよ、あなたの指針を捨てることは良い習慣です。それは確かに問題を引き起こすことはありません。あなたのポインタをゼロにする習慣が-dealloc
になると、将来の重要なバグが保存されます。
この特定のケースでは、必要ではないかもしれませんが、どのような問題が示唆されていますか?
合成されたアクセサだと仮定すると、deallocでそれを行うことには意味がありません。以前は、もうオブジェクトと話をしたくない場合は、それを無視することがあります。私はそれが問題を引き起こす方法を見ることができません。
合成されたアクセサでない場合、セッターは何らかの方法で逆の関係に影響を与える可能性があります。その場合は、foo
にはもう周りにいないことを伝えるためにそれをnilに設定する必要があります。
assignプロパティの-iallocにivarをnilに設定する必要はありません。
-deallocでivarをnilに設定するのは無害です。パブリックアクセサを使用して、dealloc([self setFoo:nil]またはself.foo = nil)のプロパティをnilに設定すると、望ましくない副作用が生じる可能性があります。
私はそれが必要かどうか疑問に思っていたので、未知のバグや多くの頭痛を避けることができました。私が混乱していることの1つは、変数の割り当て方法です。私はself.fooをnilに割り当てると、それに割り当てられた他の仮説変数もnilに設定されないと思いましたか?私は問題を説明するのに苦労していますので、わかったら教えてください:) – Meroon
インスタンス変数foo(この場合はself.fooを返しますが、このコードからはわかりません)はaですオブジェクトへのポインタ。これをnilに設定すると、オブジェクト(またはそのオブジェクトを指すポインタ)を変更するのではなく、ポインタを移動しています。あなたは将来の頭痛やバグを回避しようとしています。なぜなら、deallocですべてのivarポインタを設定しなくてはならない(あなたが保持しているものを解放するだけでなく)のが習慣になっている理由です。 –