通过runtime动态创建一个类

步骤

第0步,#import <objc/runtime.h>

要创建一个新类,首先调用objc_allocateClassPair。 然后使用class_addMethod和class_addIvar等函数设置类的属性。 完成构建类后,调用objc_registerClassPair。

参数

/** 
 * 创建一个新类和元类.
 * 
 * @param superclass 这个类是新创建的类的父类,可以传入Nil去创建一个新根类.
 * @param name 这个字符串是类的名字(例:"NSObject")
 * @param extraBytes 一般传入0 
 * @return 新的类,如果返回的是Nil,那么就是这个类创建失败了(例:创建的是"NSObject"类,然而这个类已经存在了)
 */
objc_allocateClassPair(Class _Nullable superclass, const char * _Nonnull name, 
                       size_t extraBytes) 
/** 
 * 注册使用`objc_allocateClassPair`方法创建的类
 * 
 * @param cls 需要注册的类(不能为Nil)
 */	
objc_registerClassPair(Class _Nonnull cls) 

这个objc_registerClassPair方法中的cls不能为Nil.不然会引起崩溃

代码样例
/// 创建一个元类
Class class = objc_allocateClassPair([NSObject class], "Person", 0);
/// 添加方法
//class_addMethod(<#Class  _Nullable __unsafe_unretained cls#>, <#SEL  _Nonnull name#>, <#IMP  _Nonnull imp#>, <#const char * _Nullable types#>)
/// 添加属性
//class_addIvar(<#Class  _Nullable __unsafe_unretained cls#>, <#const char * _Nonnull name#>, <#size_t size#>, <#uint8_t alignment#>, <#const char * _Nullable types#>)
/// 注册元类
objc_registerClassPair(class);
代码执行详解

在这里插入图片描述
当仅仅只是allocateClassPair时.这个Class其实是还未注册的

在这里插入图片描述
当代码走完registerClassPair时,Class才算是注册成功

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值