2012-02-24 4 views
5

deallocでsetterを使用すると、他のオブジェクトがプロパティの変更を監視している場合に問題が発生することがあります。しかし、なぜイニシャライザでそれらを使用すべきではありませんか?なぜObjective-Cのイニシャライザメソッドでselfを使うのがよいのでしょうか?

+0

人々はObjective-Cのためのあらゆる種類の「ルール」を持っています。あなたはそれらの場合約90%を安全に無視することができます。 –

答えて

6

-initでアクセサーを使用しない唯一の理由は、オブジェクトが完全に初期化されておらず、アクセサがそれに依存する可能性があるからです。これは、アクセサメソッドをオーバーライドするサブクラスがある場合にのみ発生する可能性があります。

オーバーライドされたアクセサーが部分的に割り当て解除されたオブジェクトで呼び出されないことに依存するという点で、割り当て解除に対称的な問題があります。また、虚偽のKVO通知を送信する可能性があるという問題もあります。

これは適切なカプセル化の中心に行くものです。サブクラスは、スーパークラスの実装の詳細を気にする必要はありません。

8

イニシャライザでアクセサーを使用することは決して問題ありませんでした。おそらく、あなたがセッターとゲッターでどのくらいの魔法を持っているかによって異なります。アクセサがスマートすぎると、イニシャライザーで問題が発生する可能性があります。

私はそれを考えたので、アクセサーもdeallocで使用しています。もう一度、問題なく。誰かがオブジェクトを観察している場合、オブジェクトが最初に割り当て解除されないようにする必要があります。

他の誰かが説得力のある議論を出さない限り、私はinitdeallocの両方でアクセサを使用してみて、それがどのように機能するかを見てみると思います。

関連する問題