概述
Associated Objects(关联对象)与它相关在<objc/rumtime.h>
中有3个C函数,他们可以让对象在运行时关联任何值:
(1)用给定的key
和policy
来为指定对象(object)
设置关联对象值(value)
1 | void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy) |
(2)根据给定的key
从指定对象(object)
中获取相对应的关联对象值
1 | id objc_getAssociatedObject(id object, const void *key) |
(3)移除指定对象的全部关联对象
1 | void objc_removeAssociatedObjects(id object) |
关联对象的特性
在#import <objc/runtime.h>
中关于objc_AssociationPolicy
的定义如下:
enum {
OBJC_ASSOCIATION_ASSIGN = 0,
OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1,
OBJC_ASSOCIATION_COPY_NONATOMIC = 3,
OBJC_ASSOCIATION_RETAIN = 01401,
OBJC_ASSOCIATION_COPY = 01403
};
typedef uintptr_t objc_AssociationPolicy;
objc_AssociationPolicy
是一个枚举类型的数据结构定义了OBJC_ASSOCIATION_ASSIGN
、OBJC_ASSOCIATION_RETAIN_NONATOMIC
、OBJC_ASSOCIATION_COPY_NONATOMIC
、OBJC_ASSOCIATION_RETAIN
和OBJC_ASSOCIATION_COPY
这样五个关联对象特性,每个特性的描述如下:
1 | OBJC_ASSOCIATION_ASSIGN,给关联对象指定弱引用,相当于@property(assign)或@property(unsafe_unretained) |
示例代码
1 | - (void)viewDidLoad { |