以下是获取元类的正确方法?
Class myMetaClass = objc_getMetaClass("NSString");
或者:
Class myMetaClass = object_getClass([NSString class]);
他们俩有什么不同吗?
正如第一个回答者在这里链接的另一篇文章所述:
请告诉我 为什么(????) objc_getMetaClass();
打破 案件详细。
谢谢。
答案 0 :(得分:4)
这两个函数都是正确的,但objc_getMetaClass("NSString")
仅在向目标C运行时注册NSString
时才有效。如果你想得到它的元类,它几乎总是如此。
但如果您使用Class myClass = objc_allocateClassPair(superClass,"my_own_class",0)
创建课程,情况会略有不同。
my_own_class
尚未注册,因此如果您需要访问元类(为了添加类方法),您必须使用object_getClass(myClass)
。
objc_getMetaClass("my_own_class")
会返回nil
。
答案 1 :(得分:2)
不同之处在于,第二个函数返回指定类的对象,第二个函数返回指定类的元类的对象...:)
如果没有注册类以便第二次检查,它们都会调用类处理程序回调。当你调用元类函数时,你将得到一个返回结果。
...(但是,每个类定义必须具有有效的元类 定义,因此总是返回元类定义, 它是否有效。) 来自:Objective-C Runtime Reference
我认为您真正的问题是:类和元类之间有什么区别? 请看一下这个出色的解释: What is meta-class in objective-c