我们先给self关联了一个字符串内容,然后通过get方法获取了关联的字符串内容,并输出。
从代码中其实也可以猜到各个参数的意思,self的参数就是要处理的类;associatedObjectKey 的参数其实就类似于key,用来标识区分你要关联的这个对象;第三个参数是要关联的对象;第四个参数是关联的策略,用命名就可以看出来全是在添加@property属性时用到的一些修饰符,有五种策略:
enum {
OBJC_ASSOCIATION_ASSIGN = 0,
OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1,
OBJC_ASSOCIATION_COPY_NONATOMIC = 3,
OBJC_ASSOCIATION_RETAIN = 01401,
OBJC_ASSOCIATION_COPY = 01403
};
熟悉@property属性修饰符的应该能直接明白了,不熟悉的可以看这篇文章:传送门:iOS中assign、retain、copy、weak、strong的区别以及nonatomic的含义
当然,你也可以和类别一起用,创建两个方法用来关联和获取对象,比如下面这样:
//添加关联对象
- (void)addAssociatedObject:(id)object{
objc_setAssociatedObject(self, @selector(getAssociatedObject), object, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
//获取关联对象
- (id)getAssociatedObject{
return objc_getAssociatedObject(self, _cmd);
}
这样就既能通过Category类别来添加方法,用一起顺便提供了对属性的添加了。
结
以上是对Runtime的一点浅薄的理解和使用,Runtime的天地应该是很广阔的,也能挖出很多高级的使用方法来,对于理解OC的运行机制是很有帮助的。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
注:相关教程知识阅读请移步到IOS开发频道。










