(6)总结
总而言之,使用runtime技术能做些什么事情呢?
可以在运行时,在不继承也不category的情况下,为各种类(包括系统的类)做很多操作,具体包括:
- 增加
增加函数:class_addMethod增加实例变量:class_addIvar增加属性:@dynamic标签,或者class_addMethod,因为属性其实就是由getter和setter函数组成增加Protocol:class_addProtocol (说实话我真不知道动态增加一个protocol有什么用,-_-!!)- 获取
获取函数列表及每个函数的信息(函数指针、函数名等等):class_getClassMethod method_getName ...获取属性列表及每个属性的信息:class_copyPropertyList property_getName获取类本身的信息,如类名等:class_getName class_getInstanceSize获取变量列表及变量信息:class_copyIvarList获取变量的值- 替换
将实例替换成另一个类:object_setClass将函数替换成一个函数实现:class_replaceMethod直接通过char*格式的名称来修改变量的值,而不是通过变量
- 替换
- 获取