iOS-runtime实践

2017-09-25  本文已影响6人  doudo

目录

  1. 动态添加一个类
  2. 打印一个类的所有ivar, property 和 method
  3. 给分类增加属性
  4. 动态添加方法实现
  5. 更换方法调用者
  6. 更改特定方法的实现

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);

资料:
iOS-Runtime-实践篇(基本功能)
[iOS] runtime 的使用场景--实战篇

上一篇下一篇

猜你喜欢

热点阅读