iOS runtime方法详解之添加类

Adding Classes


方法声明:

Class objc_allocateClassPair ( Class superclass, const char *name, size_t extraBytes );

描述:创建一个新的类和元类;

superclass

新建类的父类,如果传nil则创建新的根类

name

新建类的名称

extraBytes

传0即可


方法声明:

void objc_disposeClassPair ( Class cls );

描述:销毁一个类及其相关的元类。当cls类或者它的子类的实例还存在,则不能调用这个方法;也就是先要销毁类和子类的所有实例后才能销毁类;

cls

将被销毁的类. 这个类必须是通过 objc_allocateClassPair方法创建的类


方法声明:

void objc_registerClassPair ( Class cls );

描述:注册通过objc_allocateClassPair方法创建的类;


方法声明:

Class objc_duplicateClass ( Class original, const char *name, size_t extraBytes );

描述:键值观察者里面用到的,你不能调用次方法,因此忽略;


举例:

    Class JunClass = objc_allocateClassPair([NSObject class], "JunDemo", 0);
    
    BOOL isOk = NO;

    isOk = class_addIvar(JunClass,"myVar", sizeof(id), log2(sizeof(id)), "@");
    isOk == YES ? nil : NSLog(@"failed on class_addIvar");
    
    objc_registerClassPair(JunClass);
    
    id myobj = [[JunClass alloc] init];
    [myobj setValue:@"test" forKey:@"myVar"];
    
    NSLog(@"myVar: %@", [myobj valueForKey:@"myVar"]);
    myobj = nil;//当JunClass类或者它的子类的实例还存在,则不能调用objc_disposeClassPair这个方法;因此这里要先销毁实例对象后才能销毁类;
    
    objc_disposeClassPair(JunClass);



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值