rutime 理解

 

runtime理解

 rutime

 runtime:运行时,是一套底层的C语言API,包含很多强大实用的C语言数据类型和C语言函数

1.常用的头文件

 #import <objc/runtime.h> 包含对类、成员变量、属性、方法的操作
 #import <objc/message.h> 包含消息机制

2.常用方法
class_copyIvarList()返回一个指向类的成员变量数组的指针
class_copyPropertyList()返回一个指向类的属性数组的指针



10、关联

使用关联,我们可以不用修改类的定义而为其对象增加存储空间。关联是可以保证被关联的对象在关联对象的整个生命周期都是可用的(在垃圾自动回收环境下也不会导致资源不可回收)。(避免被释放掉)

用objc_setAssociatedObject来把一个对象与另外一个对象进行关联。该函数需要四个参数:源对象,关键字,关联的对象和一个关联策略
 
  

 关键字是一个void类型的指针。每一个关联的关键字必须是唯一的。通常都是会采用静态变量来作为关键字。(比如static char number 不用赋值,关键字为number的地址, )

 
  

 关联策略表明了相关的对象是通过赋值,保留引用还是复制的方式进行关联的;还有这种关联是原子的还是非原子的。这里的关联策略和声明属性时的很类似。这种关联策略是通过使用  预先定义好的常量来表示的。

 

设置关联:objc_setAssociatedObject(关联对象, &关键字, 被关联对象, OBJC_ASSOCIATION_RETAIN);  

获取关联对象:  NSString * associatedObject = (NSString *)objc_getAssociatedObject(关联对象, &关键字);  //假如关键字是字符串类型

断开关联关系:objc_setAssociatedObject(关联对象, &关键字, nil, OBJC_ASSOCIATION_RETAIN);//被关联对象传nil即可

       使用函数objc_removeAssociatedObjects可以断开所有关联。通常情况下不建议使用这个函数,因为他会断开所有关联。只有在需要把对象恢复到“原始状态”的时候才会使用这个函数。

 

 

 

 

 

转载于:https://www.cnblogs.com/mojiewei/p/6275451.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值