iOS runtime方法详解之添加类

来源:互联网 发布:python pillow 安装 编辑:程序博客网 时间:2024/06/05 04:32

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



0 0
原创粉丝点击