关联对象用途
分类不能拥有成员变量
{NSString *str}
但是能拥有属性@property
属性
一个类添加属性@property
,实际上是做了3个事情
- 添加成员变量
- 添加
setter,getter
方法声明 - 添加
setter,getter
方法实现
如果是为分类添加属性
- 只添加了
setter,getter
方法的声明
关联对象函数(c语言)
可以通过关联对象为分类添加成员变量
//添加关联对象
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);
对象/属性/值/关联策略
objc_setAssociatedObject(self,“str”,urlString,OBJC_ASSOCIATION_COPY);
objc_getAssociatedObject(self,“str”);
关联策略
OBJC_ASSOCIATION_ASSIGN//等价于 @property(assign)。
OBJC_ASSOCIATION_RETAIN_NONATOMIC//等价于 @property(strong, nonatomic)。
OBJC_ASSOCIATION_COPY_NONATOMIC//等价于@property(copy, nonatomic)。
OBJC_ASSOCIATION_RETAIN//等价于@property(strong,atomic)。
OBJC_ASSOCIATION_COPY//等价于@property(copy, atomic)。