UIView
。という名前のプロパティを持つカスタムサブクラスを作成したとしましょうimageView
。私は次のように合成しimageView
ました:
@synthesize imageView = _imageView;
すべてのカスタムクラスメソッドの_imageView
代わりに使用しても安全ですか?self.imageView
UIView
。という名前のプロパティを持つカスタムサブクラスを作成したとしましょうimageView
。私は次のように合成しimageView
ました:
@synthesize imageView = _imageView;
すべてのカスタムクラスメソッドの_imageView
代わりに使用しても安全ですか?self.imageView
いいえ、ivarに直接アクセスするのは安全ではありません。明確にするために:
_imageView
の略ですself->_imageView
:直接ivarアクセス。self.imageView
略して[self imageView]
:アクセサメソッドを使用します。クラス実装内からアクセサーを使用すると、次の利点があります。
atomic
、別のスレッドが同時にセッターを使用している場合でも、戻り値を使用しても安全です。copy
に宣言されたプロパティをバックするivarに割り当てるときに忘れがちcopy
です。アクセサーをオーバーライドしていなければ安全です。たとえば、代替動作を提供する場合-setImageView
、直接呼び出すとivar
その動作はスキップされます。一般的なデザイン ルールとして、ivar を直接使用するよりもアクセサー メソッドを使用する傾向があります。意図しない副作用が発生しにくく、アクセサーをオーバーライドする場合に継承がうまく機能します。
それは一種の節約ですが、良い習慣ではありません。_imageViewは、setterおよびgetter自体とinitでのみ使用する必要があります。特に、後でクラスをサブクラス化したい場合。サブクラスは、getterメソッドとsetterメソッドを意図的に上書きする場合があります。その場合、_imageViewに期待するものが含まれていない可能性があります。self.imageViewを使用します。それはアクセサーを呼び出します