Ios 使用UIAppearance代理而不是普通默认值有什么好处?
请您向我解释一下,使用Ios 使用UIAppearance代理而不是普通默认值有什么好处?,ios,objective-c,uiappearance,Ios,Objective C,Uiappearance,请您向我解释一下,使用UIAppearance代理对象自定义我的UIView子类属性,而不是创建setter方法来提供所需的默认值(如以下代码示例中所示),会有什么好处: @interface CustomView : UIView + (void)setDefaultBackgroundColor: (UIColor *)defaultBackgroundColor; @end @implementation CustomView static UIColor *defaultBack
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];
这并不是
UIAppearance
的实际用例。如果您正在编写一个只在单个项目中使用的UIView
子类,那么只需按照您想要的方式进行设计即可
如果您决定使该子类在所有项目中都可用,并且可能需要为每个项目专门设置样式,UIAppearance
。或者,如果您想使用大量实例,而不必单独设置每个实例的样式
与
UILabel
的工作原理类似。它是一个UIView
子类,设计用于各种不同的项目。这实际上不是UIAppearance
的用例。如果您正在编写一个只在单个项目中使用的UIView
子类,那么只需按照您想要的方式进行设计即可
如果您决定使该子类在所有项目中都可用,并且可能需要为每个项目专门设置样式,UIAppearance
。或者,如果您想使用大量实例,而不必单独设置每个实例的样式
与
UILabel
的工作原理类似。它是一个UIView
子类,设计用于各种不同的项目。好吧,假设我已经决定让该子类在其他项目中可用。我不明白,使用[MyCustomView外观]setBackgroundColor]有什么好处代码>vs[MyCustomView setDefaultBackgroundColor]代码>。在这两种情况下,我们只是为所有新实例提供默认颜色。我说的对吗?@Storix不一定。使用UIAppearance
协议,当包含Instancesof
(或任何名称)时,您可以很好地控制何时使用具有外观的特定样式。此外,我不确定,但我不知道在使用静态属性与外观时,自定义控件的子类化将如何影响样式设置。我不认为您很容易就能扩展它?我想,在Objective C runtime的帮助下,在包含Instancesof
的情况下,结合静态变量实现类似于外观的方法并不困难。但是我得到的关于UIAppearance
proxy的信息是,它提供了以下优点:1。可读性和可维护性(由于代理设计模式,我们有统一的接口)2。我们不需要重新发明轮子:)谢谢你的回答。@Storix是的,你完全可以自己重新创造它。但是,UIAppearance已经为您创建了:)好吧,假设,我已经决定使该子类在其他项目中可用。我不明白,使用[MyCustomView外观]setBackgroundColor]有什么好处代码>vs[MyCustomView setDefaultBackgroundColor]代码>。在这两种情况下,我们只是为所有新实例提供默认颜色。我说的对吗?@Storix不一定。使用UIAppearance
协议,当包含Instancesof
(或任何名称)时,您可以很好地控制何时使用具有外观的特定样式。此外,我不确定,但我不知道在使用静态属性与外观时,自定义控件的子类化将如何影响样式设置。我不认为您很容易就能扩展它?我想,在Objective C runtime的帮助下,在包含Instancesof
的情况下,结合静态变量实现类似于外观的方法并不困难。但是我得到的关于UIAppearance
proxy的信息是,它提供了以下优点:1。可读性和可维护性(由于代理设计模式,我们有统一的接口)2。我们不需要重新发明轮子:)谢谢你的回答。@Storix是的,你完全可以自己重新创造它。但是,已经为您创建了UIAppearance:)