deallocでsetterを使用すると、他のオブジェクトがプロパティの変更を監視している場合に問題が発生することがあります。しかし、なぜイニシャライザでそれらを使用すべきではありませんか?なぜObjective-Cのイニシャライザメソッドでselfを使うのがよいのでしょうか?
5
A
答えて
6
-init
でアクセサーを使用しない唯一の理由は、オブジェクトが完全に初期化されておらず、アクセサがそれに依存する可能性があるからです。これは、アクセサメソッドをオーバーライドするサブクラスがある場合にのみ発生する可能性があります。
オーバーライドされたアクセサーが部分的に割り当て解除されたオブジェクトで呼び出されないことに依存するという点で、割り当て解除に対称的な問題があります。また、虚偽のKVO通知を送信する可能性があるという問題もあります。
これは適切なカプセル化の中心に行くものです。サブクラスは、スーパークラスの実装の詳細を気にする必要はありません。
8
イニシャライザでアクセサーを使用することは決して問題ありませんでした。おそらく、あなたがセッターとゲッターでどのくらいの魔法を持っているかによって異なります。アクセサがスマートすぎると、イニシャライザーで問題が発生する可能性があります。
私はそれを考えたので、アクセサーもdealloc
で使用しています。もう一度、問題なく。誰かがオブジェクトを観察している場合、オブジェクトが最初に割り当て解除されないようにする必要があります。
他の誰かが説得力のある議論を出さない限り、私はinit
とdealloc
の両方でアクセサを使用してみて、それがどのように機能するかを見てみると思います。
関連する問題
- 1. object.initializeでは、selfを使う方が良いでしょうか。 @以上?
- 2. [self release]、[self retain]を使うのは良いアプローチですか?
- 3. なぜ人気が高まるのでしょうか?
- 4. なぜstd :: moveがここで失敗しているのでしょうか?
- 5. なぜuser.dirを "。"に設定できるのでしょうか?
- 6. IObjectSafetyを実装していないのはなぜでしょうか
- 7. なぜ、この.htaccessはフォルダを含んでいるのでしょうか?
- 8. なぜPerl 6の内100 ~~^100リターン偽のでしょうか?
- 9. これはなぜNullReferenceExceptionを出すのでしょうか?
- 10. 私の例ではなく、なぜ認可ライブラリーを使用する方が良いでしょうか?
- 11. PHPはなぜ2つの等しいものが不等であると言うでしょうか?
- 12. 複数のNSAutoReleasePoolsを使用できますか?なぜこれが必要なのでしょうか?
- 13. このペイラインのセキュリティで保護されたフォームがなぜ機能しないのでしょうか?
- 14. なぜHtml.AgilityPackはいくつかのイメージタグを欠場するでしょうか?
- 15. PHPでselfを返すことができないのはなぜですか?
- 16. 致命的なエラー:なぜ、この作品ではないでしょう228
- 17. GeneratedMethodAccessor1,2などとは何ですか?なぜそれらが見つからないのでしょうか?
- 18. これはなぜ印刷されないのでしょうか?
- 19. なぜC#ProcessStartInfoRedirectStandardOutputがxcopyプロセスを失敗させるのでしょうか
- 20. なぜ "class << self"式を使用するのですか?
- 21. なぜ人々は純粋なXMLデータベースをプレーンなRDBMよりも使用するのでしょうか?
- 22. getattr()がselfよりもずっと遅いのはなぜですか?__ dict __。get()?
- 23. クラス 'オブジェクト'から作成したクラスを継承するのはなぜよいのでしょうか?
- 24. JZMQを使用できる場合、なぜJeroMQが必要なのでしょうか?
- 25. なぜmemcachedのようなMySQLを使用しないのですか?
- 26. この特定のテストはなぜ有用なのでしょうか?
- 27. どのような描画技術が適切でしょうか?
- 28. クロスブラウザプログラミングにはどのようなツールが最適でしょうか?
- 29. なぜTCP RSTパケットが生成されたのでしょうか
- 30. このようなマップをC++で初期化するにはどうすればよいでしょうか?
人々はObjective-Cのためのあらゆる種類の「ルール」を持っています。あなたはそれらの場合約90%を安全に無視することができます。 –