>我经常使用延迟加载来实例化自定义类、数组等。 模式通常为:
@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 来配置元素呢?
如果这真的是你想要的方式,只需使用 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