我知道如何创建协议但我想知道创建代理协议的最佳做法是什么,例如Apple为UIAppearance协议和某些UI类的实现。
为什么我要这样做呢?因为我已经有很多UI类,我想集中实现代码的改变颜色。
也许是一个奇怪的问题,但我的好奇心驱使我到了这一步。
由于
答案 0 :(得分:11)
只需使代理成为静态对象并通过类级方法访问它,就像实现单例一样,例如
@implementation MyClass
+ (MyProxyObject *)proxy
{
static MyProxyObject *sharedProxy = nil;
if (sharedProxy == nil)
{
sharedProxy = [[MyProxyObject alloc] init];
}
return sharedProxy;
}
@end
然后,对于您班级的任何财产,例如textColor,让你的类使用[[self class] proxy] .textColor中的值,而不是存储自己的值。 E.g。
@interface MyClass : UIView
@property (nonatomic, strong) textColor
@end
@implementation MyClass
- (UIColor *)textColor
{
return textColor ?: [[self class] proxy].textColor
}
@end
如果您需要在代理上的属性更改时立即刷新屏幕视图的方法,您可以通过让代理在其textColor setter方法中广播NSNotification并让所有实例观察到该通知和调用来实现setNeeds在收到它们时自行显示。