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

在 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 回答
1

我提出一个替代方案。您将自己设置为标签属性更改的观察者,并在作为选择器传递的方法中做额外的事情。它更加模块化并且不太可能破坏事物。

于 2012-05-27T12:38:39.747 回答