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

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,不是线程安全的
};

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,973评论 19 139
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,615评论 8 265
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,144评论 1 32
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AGI阅读 16,012评论 3 119
  • 我们总能听到某个专家或投资大师说:不要去预测市场,因为市场永远不可预测。 事实真是如此,你可以去翻翻了解以前的历史...
    Nero康阅读 671评论 0 2