美文网首页
Runtime 关联对象, 可在分类中添加属性

Runtime 关联对象, 可在分类中添加属性

作者: iOS_愛OS | 来源:发表于2018-06-08 11:34 被阅读27次

Runtime 关联对象, 可在分类中添加属性

关联 API 如下

  1. 设置关联值
/*
    object:与谁关联,通常是传self
    key:唯一键,在获取值时通过该键获取,通常是使用static const void *来声明
    value:关联所设置的值
    policy:内存管理策略,比如使用copy9
*/
void objc_setAssociatedObje
ct(id object, const void *key, id value, objc _AssociationPolicy policy)
// 如:
// objc_setAssociatedObject(self, @selector(name), name, OBJC_ASSOCIATION_COPY_NONATOMIC);
  1. 获取关联值
/*
    object:与谁关联,通常是传self,在设置关联时所指定的与哪个对象关联的那个对象
    key:唯一键,在设置关联时所指定的键
*/
id objc_getAssociatedObject(id object, const void *key)
// 如: 
//  objc_getAssociatedObject(self,@selector(name))

  1. 取消关联
void objc_removeAssociatedObjects(id object)

关联策略

typedef OBJC_ENUM(uintptr_t, objc_AssociationPolicy){
OBJC_ASSOCIATION_ASSIGN = 0,             // 表示弱引用关联,通常是基本数据类型
OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1,   // 表示强引用关联对象,是线程安全的
OBJC_ASSOCIATION_COPY_NONATOMIC = 3,     // 表示关联对象copy,是线程安全的
OBJC_ASSOCIATION_RETAIN = 01401,         // 表示强引用关联对象,不是线程安全的
OBJC_ASSOCIATION_COPY = 01403            // 表示关联对象copy,不是线程安全的
};

相关文章

网友评论

      本文标题:Runtime 关联对象, 可在分类中添加属性

      本文链接:https://www.haomeiwen.com/subject/swnosftx.html