以下哪一项是获取元类的正确方法?
Class myMetaClass = objc_getMetaClass("NSString");
或:
Class myMetaClass = object_getClass([NSString class]);
它们两者有什么不同吗?
正如在第一个答复者链接的另一篇文章中提到的:
请告诉我为什么 objc_getMetaClass();
在某些情况下会详细地[[break。
objc_getMetaClass("NSString")
时,NSString
才有效。如果要获取其元类,几乎总是这样。但是如果您使用Class myClass = objc_allocateClassPair(superClass,"my_own_class",0)
创建一个类,情况会略有不同。
my_own_class
尚未注册,因此,如果您需要访问元类(以添加类方法),则必须使用object_getClass(myClass)
。objc_getMetaClass("my_own_class")
将返回nil
。
如果没有注册该类以进行第二次检查,它们两者都将调用类处理程序回调。当您调用元类函数时,您将获得返回结果。
...(但是,每个类定义必须具有有效的元类定义,因此总是返回元类定义,是否有效。)来自:Objective-C Runtime Reference
我认为您真正的问题是:
类和元类之间有什么区别?请看一下这个出色的解释:What is meta-class in objective-c