码迷,mamicode.com
首页 > 其他好文 > 详细

runtime - associated(关联)

时间:2016-06-04 16:23:36      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:

category和associative作为objective-c的扩展机制的两个特性,category用来扩展类的方法,associative可以用来扩展类的属性。使用associative需要导入<objc/runtime.h>文件。

他有三个方法
1.设置关联对象 objc_setAssociatedObject

OBJC_EXPORT void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)

参数:object:源对象
key:关键字
value:关联对象
policy:关联侧率

2.获取关联对象 objc_getAssociatedObject

OBJC_EXPORT id objc_getAssociatedObject(id object, const void *key)

参数:object:源对象
key:关键字

3.断开关联 objc_removeAssociatedObjects

OBJC_EXPORT void objc_removeAssociatedObjects(id object)

参数:object:源对象

该方法会断开所有的关联,只有在需要把对象恢复到原始状态的时候才会使用这个函数。

 

下面以SDWebImage中的方法作为参考例子:

static char imageURLKey;
@implementation UIImageView (WebCache)

设置关联:
- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock {
    //设置关联
    objc_setAssociatedObject(self, &imageURLKey, url, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

}

//获取关联对象
- (NSURL *)sd_imageURL {
    return objc_getAssociatedObject(self, &imageURLKey);
}

 

runtime - associated(关联)

标签:

原文地址:http://www.cnblogs.com/wlsxmhz/p/5558906.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!