iOS-runtime实践
2017-09-25 本文已影响6人
doudo
目录
- 动态添加一个类
- 打印一个类的所有ivar, property 和 method
- 给分类增加属性
- 动态添加方法实现
- 更换方法调用者
- 更改特定方法的实现
1. 动态添加类
// 创建一个类(size_t extraBytes该参数通常指定为0, 该参数是分配给类和元类对象尾部的索引ivars的字节数。)
Class clazz = objc_allocateClassPair([NSObject class], "GoodPerson", 0);
// 添加ivar
// @encode(aType) : 返回该类型的内部表示字符串, 如@encode(int) -> i
class_addIvar(clazz, "_name", sizeof(NSString *), log2(sizeof(NSString *)), @encode(NSString *));
class_addIvar(clazz, "_age", sizeof(NSUInteger), log2(sizeof(NSUInteger)), @encode(NSUInteger));
// 注册该类
objc_registerClassPair(clazz);