搬运Runtime Associated Objects相关知识

原理部分来源博客:玉令天下的博客
例子部分来源博客:zuolingfeng简书
在 OS X 10.6 之后,Runtime系统让Objc支持向对象动态添加变量。涉及到的函数有以下三个:

void objc_setAssociatedObject ( id object, const void *key, id value, objc_AssociationPolicy policy );
id objc_getAssociatedObject ( id object, const void *key );
void objc_removeAssociatedObjects ( id object );

这些方法以键值对的形式动态地向对象添加、获取或删除关联值。其中关联政策是一组枚举常量:

enum {
   OBJC_ASSOCIATION_ASSIGN  = 0,
   OBJC_ASSOCIATION_RETAIN_NONATOMIC  = 1,
   OBJC_ASSOCIATION_COPY_NONATOMIC  = 3,
   OBJC_ASSOCIATION_RETAIN  = 01401,
   OBJC_ASSOCIATION_COPY  = 01403
};

具体应用:给Category绑定属性值

#import "UIImage+category.h"

static const void *tagKey = &tagKey;

@implementation UIImage (category)

- (NSString *)tag {
    return objc_getAssociatedObject(self, tagKey);
}

- (void)setTag:(NSString *)tag {
    objc_setAssociatedObject(self, tagKey, tag, OBJC_ASSOCIATION_COPY_NONATOMIC);
}
@end

访问属性

UIImage *image = [UIImage imageNamed:@""];
[image setTag:@"100"];
NSLog(@"tag:%@", [image tag]);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,840评论 0 9
  • 对于从事 iOS 开发人员来说,所有的人都会答出【runtime 是运行时】什么情况下用runtime?大部分人能...
    梦夜繁星阅读 9,084评论 7 64
  • 文中的实验代码我放在了这个项目中。 以下内容是我通过整理[这篇博客] (http://yulingtianxia....
    茗涙阅读 4,463评论 0 6
  • 今早看了张妍的两篇觉察日记,有很多共鸣和联想! 关于从小我到高我的成长路径背后动力是我这个想活出自己的人怎么活出呢...
    文迪蓉蓉阅读 1,287评论 0 2
  • 大家有这种感受吗?如果某一天早晨,因为太匆忙,忘记了拿手机,然后因为家离公司比较远,所以你必须过一天没有手机的日子...
    遇见美丫阅读 4,324评论 0 0