当使用系统类的时候如果需要添加一个属性 可以选择新建立一个类继承该系统类在新建类中添加属性,和使用扩展类。
例如:当前使用UIViewController的扩展类,为其添加一个类型为NSString的对象 对象名为test;
@property(nonatomic,copy)NSString *test;
通过objc_setAssociatedObject在其set方法中将该属性关联到该类
-(void)setTest:(NSString *)test{
objc_setAssociatedObject(self, @selector(test), test, OBJC_ASSOCIATION_COPY_NONATOMIC);
}
void objc_setAssociatedObject(id object, const void *key, id value, objc _AssociationPolicy policy)
object:与谁关联,通常是传self
key:唯一键,在获取值时通过该键获取,通常是使用static
const void *来声明
value:关联所设置的值
policy:内存管理策略,比如使用copy
通过objc_getAssociatedObject在该属性的get方法中得到其值
-(NSString *)test
{
return objc_getAssociatedObject(self, @selector(test));
}
id objc_getAssociatedObject(id object, const void *key)
object:与谁关联,通常是传self,在设置关联时所指定的与哪个对象关联的那个对象
key:唯一键,在设置关联时所指定的键