使用UIAppearance代理而不是普通默认值有什么好处?

时间:2016-05-11 10:50:12

标签: ios objective-c uiappearance

请问您能解释一下,使用UIAppearance代理对象来自定义我的UIView子类属性,而不是创建setter方法以提供所需的默认值,如下所示代码示例:

@interface CustomView : UIView

+ (void)setDefaultBackgroundColor: (UIColor *)defaultBackgroundColor;

@end

@implementation CustomView

static UIColor *defaultBackgroundColor_ = nil;

- (id)initWithFrame:(CGRect)frame
{
  self = [super initWithFrame:frame];
  if (self) {
    if (!defaultBackgroundColor_)
      defaultBackgroundColor_ = [UIColor blackColor];
  }
  return self;
}

+ (void)setDefaultBackgroundColor: (UIColor *)defaultBackgroundColor {
  defaultBackgroundColor_ = defaultBackgroundColor;
}

@end

在我阅读过的所有文章中,他们都说过UIAppearance用法,更改此代理的属性允许类的实例自动获得相同的值。我无法完全掌握的是代理对象是否真的需要用于此目的?在这种情况下,使用静态变量来保持默认值是否有任何缺点?

为了使事情更清楚,我将比较这种方法:

 [CustomView appearance]setBackgroundColor:someNewColor];

用这个:

 [CustomView setDefaultBackgroundColor:someNewColor];

1 个答案:

答案 0 :(得分:3)

这不是UIAppearance的用例。如果您正在编写UIView子类仅用于单个项目,那么只需按照您想要的方式进行。

UIAppearance如果您决定使该子类在所有项目中都可用,那么可能需要为每个项目专门设置样式。或者,如果你想使用它的大量实例而不必单独设置每个样式。

UILabel的工作方式类似。它是一个UIView子类,旨在用于各种不同的项目。