考虑:
@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下的默认合成setter
答案 0 :(得分:1)
我提出了另一种选择。您将自己设置为更改标签属性的观察者,并在您作为选择器传递的方法中执行额外的操作。它更模块化,更不容易破坏。
答案 1 :(得分: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
}
这是一个非常典型的重写访问器。