Objective-C中的meta-class(二)

2014-11-23 23:16:57 · 作者: · 浏览: 26
ion,我们需要建立这个动态创建的类的实例,然后调用它的report方法

id instanceOfNewClass =

[[newClass alloc] initWithDomain:@”someDomain” code:0 userInfo:nil];

[instanceOfNewClass performSelector:@selector(report)];

[instanceOfNewClass release];

因为没有report方法的声明,我使用performSelector:来调用它,所以编译不会给出什么警告

ReportFunction将遍历isa指针,告诉我们那些对象被当成类,meta-class,以及meta-class的类 来使用

取得一个对象的类:ReportFunction将使用object_getClass来追踪isa指针, 因为isa指针是类的一个被保护的成员(你不能直接访问其他类的isa指针)

ReportFunction不使用类方法来实现这个,因为调用一个类对象的类方法,将不会返回meta-class. 而是再次返回这个类(所以[NSString class]将返回NSString类,而不是NSString的meta-class)

结论:

meta-class是类对象的类。每个类都有它自己唯一的meta-class(因为每个类都有它自己唯一的方法列表)