实现的功能:为分类添加属性(看上去像),实现完全不用在控制器上初始化,而只需要调用方法就好了.
@interface UIView (Annimation)
@property(nonatomic,strong)AnimationIndicator *indicator;//这不是真实的属性,只是为了生成get和set方法
@end
@implementation UIView (Animation)
#pragma mark - 运行时相关
static char AnimationKey;
- (void)setIndicator:(AnimationIndicator *)indicator {
objc_setAssociatedObject(self, &AnimationKey,
indicator,
OBJC_ASSOCIATION_RETAIN);//参数:绑定到的对象,一个key(就这样,也不用赋值),被绑定的对象,绑定的策略
}
- (AnimationIndicator *)indicator {
return objc_getAssociatedObject(self, &AnimationKey);//根据key返回绑定的值
}
上面的两步就为分类建立了实在的属性,
如果我在添上如下的代码,
-(void)addAnimation
{
if(!self.indicator){
self.indicator=[[alloc]init];
}
[self addsubview:self.indicator];
[self.indicator starAnimation]
}
这样只需要调用一行代码我们的控制器中就会有一个,在这个分类中实现了的加载动画出现了.