1

Objective-Cのオブジェクトが自殺するのは良い習慣ですか?つまり、オブジェクトが[self dealloc]どこで-dealloc許可されているかを宣言するために、通常どおり整然と終了しますか?主なリスクは何ですか?

たまたま、特定の例があります。NSObjectを拡張し、NSTimerインスタンスとタイマーの起動回数を制限するように設定されたNSUIntegerで構成されるカスタムタイマーオブジェクトです。時間切れになると、オブジェクトはタイマーにそのメソッド-invalidateを呼び出すことで自殺を指示し、自殺します。-deallocこれは自動的に行われるため、オブジェクトを追跡したり、オブジェクトの割り当てを解除する正しいタイミングを決定的に知る必要はありません。

より詳細な説明については、こちらの私の投稿を参照してください

4

2 に答える 2

9

-deallocを呼び出すべきではありません。代わりに[selfrelease]を呼び出して、参照カウントが0になるようにし、システムに-deallocを呼び出させます。

于 2010-09-29T07:37:44.887 に答える
8

Objective-Cのオブジェクトが自殺するのは良い習慣ですか?つまり、オブジェクトが[selfdealloc]を宣言する場合。-deallocは通常どおり整然とした終了を許可しますか?主なリスクは何ですか?

いいえ。

あなたがdeallocへの呼び出しを書くべきである唯一の時は、あなたのクラスの1つのdeallocメソッドでスーパーオブジェクトにdeallocを送ることです。例外なし。

それ以外のときにdeallocをオブジェクトに送信しようとすると、他のオブジェクトにダングリングポインタが残るリスクがあります。しないでください。


自分にリリースを送るべきですか?これは別の問題ですが、それでもメモリ管理ルールに従う必要があります。自分に保持を送信した場合は、ある時点で自分にリリースを送信する必要があります。initにある1つの例外があります。初期化に失敗した場合は、selfを解放してnilを返す必要があります(allocがretainをselfに送信したと主張できると思います)。

于 2010-09-29T08:36:56.677 に答える