0

検討:

@interface MyView : UIView
@property (strong, nonatomic) UILabel * label ;
@end

と:

@implementation MyView
@synthesize label ;
- (void) setLabel: (UILabel *) label_ {
    self->label = label_ ;
    // ... custom stuff for when the label is changed from the outside
}
@end

理想的には、デフォルトの合成セッターを「トラップ」して、ARCの下で「正しいことを実行」し、この新しいラベルでコンテキストを「更新」するために必要なものだけを追加するのが理想的です。

私はその行が心配です:

self->label = label_ ;

自分で提供することを選択しなかった場合に、デフォルトの合成セッターが保証するであろう不変条件をバイパスするだけです。

ARCでデフォルトの合成セッターを「オーバーライド」する適切な方法は何ですか?

4

2 に答える 2

1

代替案を提案します。ラベルプロパティの変更に対するオブザーバーとして自分自身を設定し、セレクターとして渡すメソッドで余分な作業を行います。それはよりモジュール化されており、物事を壊す可能性が低くなります。

于 2012-05-27T12:38:39.747 に答える
1

ARCでは、デフォルトのセッターは次のようになります。

label = label_;

ただし、アンダースコアを使用する場合は、アンダースコア付きの名前をバッキングivarとして使用することもできます。

@synthesize label = label_;

と:

- (void) setLabel: (UILabel *) label{
    label_ = label;
    // ... custom stuff for when the label is changed from the outside
}

これは、かなり典型的なオーバーライドされたアクセサです。

于 2012-05-27T12:47:43.693 に答える