请问您能解释一下,使用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];
答案 0 :(得分:3)
这不是UIAppearance
的用例。如果您正在编写UIView
子类仅用于单个项目,那么只需按照您想要的方式进行。
UIAppearance
如果您决定使该子类在所有项目中都可用,那么可能需要为每个项目专门设置样式。或者,如果你想使用它的大量实例而不必单独设置每个样式。
与UILabel
的工作方式类似。它是一个UIView
子类,旨在用于各种不同的项目。