0

我经常使用延迟加载来实例化自定义类、数组等。模式通常是:

@property (strong, nonatomic) Class *class;

...

- (Class *)class
{
    if(!_class) _class = [[Class alloc]init];
    return _class;
}

是否可以使用相同的模式来配置 UI 元素?例如,我不想在 ViewWillAppear 中格式化我所有的按钮和视图,而是将格式化放在 getter 中。例如:

- (UIButton *)button
{
    if(!_button) {
        _button = [[UIButton alloc]init];
        self.button.backgroundColor = [UIColor redColor];
    }
    return _button;
}

问题是我正在使用情节提要,XCode 实例化了按钮,所以询问它是否为 nill 应该总是返回 false。所以背景永远不会改变。如果我删除 if-then,那么每次访问 getter 时都会设置背景,这可能没问题但不是最佳的。

那么,如何使用 UI 元素的 getter 来配置元素呢?

4

1 回答 1

0

如果这确实是您想要的方式,只需使用BOOL标志。例如:

@interface MyClass() {

    BOOL _hasCustomisedButton;
}

@property (strong, nonatomic) UIButton *button;

@end

@implementation MyClass


- (UIButton *)button {

    if (_hasCustomisedButton || _button == nil) {
        // check for nil button as well in case the nib isn't loaded yet
        return _button;
    }

    [_button setBackgroundColor:[UIColor redColor]];

    _hasCustomisedButton = YES;

    return _button;
}

@end
于 2013-01-31T13:42:22.817 回答