5

Apple Programming with Objective-Cドキュメントには、次のように記載されています。

プロパティが設定された時点では、オブジェクトの残りの部分がまだ完全に初期化されていない可能性があるため、常に初期化メソッド内からインスタンス変数に直接アクセスする必要があります。カスタム アクセサー メソッドを提供していない場合や、独自のクラス内からの副作用を認識していない場合でも、将来のサブクラスが動作をオーバーライドする可能性があります。

しかし、setter メソッドにどのような副作用があるのか​​ わかりません。初期化メソッド内からインスタンス変数に直接アクセスする必要がある理由を説明する例を教えてください

4

3 に答える 3

4

答えは簡単です。それはコードの匂いです。Objective-C のようなドット表記self.foobar = somethingは、メッセージングのための単なる構文糖衣です。にメッセージを送信することselfは、通常は問題ありません。ただし、回避する必要がある場合が 2 つあります。

1. オブジェクトの作成時、および

2.オブジェクトが破壊されているとき。

この 2 つの時点で、オブジェクトは奇妙な中間状態にあります。誠実さに欠けます。これらの時間帯にメソッドを呼び出すのは、コードの臭いです。すべてのメソッドは、オブジェクトを操作する際に不変条件を維持する必要があるためです。

于 2013-07-17T15:11:40.157 に答える
3

セッター メソッドがサブクラスによってオーバーライドされた場合、インスタンス変数に正しいデータが含まれているという保証はありません。初期化などの重要なフェーズでオブジェクト内のデータの整合性を維持したい場合は、Apple の推奨に従ってください。

于 2013-07-17T15:03:42.977 に答える