Objective-C 动态创建新类

在运行时创建新类的流程:

  • 使用 objc_allocateClassPair 创建新类(和元类,这就是函数名叫 objc_allocateClassPair 的原因吧)。
  • 使用 class_addIvar 添加实例变量。
  • 使用 class_addMethod 添加方法。
  • 使用 objc_registerClassPair 将设置好的新类注册到运行时。

objc_allocateClassPair

Class objc_allocateClassPair(Class superclass, const char *name, size_t extraBytes);
  • 参数:超类、新建类的类名、类对象的额外空间(一般不需要)
  • 返回:新类的类对象。如失败返回 nil
  • 可以通过调用 object_getClass(newClass) 获得 metaclass 的对象。

class_addIvar

BOOL class_addIvar(Class cls, const char *name, size_t size, uint8_t alignment, const char *types);
  • 只能在 objc_allocateClassPairobjc_registerClassPair 之间调用。已经存在的类不能够再添加实例变量。
  • 不能对 metaclass 使用。

class_addMethod

BOOL class_addMethod(Class cls, SEL name, IMP imp, const char *types);
  • 可以对已经存在的类使用(例如用在方法解析)。
  • 如果需要添加类方法,可以对 metaclass使用。
  • 可以覆盖超类的实现,但不能覆盖自己类中已有的实现。
  • 如果想覆盖自己类中已有的实现,可以使用 method_setImplementation

参考: Objective-C Runtime(官方文档)

你可能感兴趣的:(Objective-C 动态创建新类)