entation(Method m, IMP imp) 为该方法设置一个新的实现
(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 *格式的名称来修改变量的值,而不是通过变量 |