IOS Object-C 中Runtime详解及实例代码

2020-01-18 21:31:31王冬梅

我们先给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开发频道。