Runtime关联对象

当使用系统类的时候如果需要添加一个属性 可以选择新建立一个类继承该系统类在新建类中添加属性,和使用扩展类。

例如:当前使用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:唯一键,在设置关联时所指定的键

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

推荐阅读更多精彩内容