IOS AssociatedObject 动态关联

需求

想给UIView 加上一个 loading信息,开始网络请求前显示loading信息,数据加载完成后去掉。简单来实现可以在VC里面实现,但是代码复用度不高。看到Coding里有个不错的做法,把loading执行开始结束过程放到uiview category里面这样任何view 都可以轻松的调用。

接口

//调用接口
 @property (strong, nonatomic) EaseLoadingView *loadingView;
- (void)beginLoading;
- (void)endLoading;

实现

//类似 NSDictionary 方式添加key value
- (void)setLoadingView:(UIView *)loadingView{
    //LoadingViewKey属性有变化才执行
    [self willChangeValueForKey:@"LoadingViewKey"];
    //给view 添加loadingView
    objc_setAssociatedObject(self, &LoadingViewKey,
                             loadingView,
                             OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    [self didChangeValueForKey:@"LoadingViewKey"];
}
- (UIView *)loadingView{
//通过key来获取 loadingView
    return objc_getAssociatedObject(self, &LoadingViewKey);
}

细节

由于关联对象使用key比对时候需要指针相等,所以key定义全局变量。
如:static char kAssociatedObjectKey;

参考

http://nshipster.cn/associated-objects/

你可能感兴趣的:(io)