metaClass和class的理解

来源:互联网 发布:java ftpclient 卡住 编辑:程序博客网 时间:2024/05/01 18:13

1.metaClass其实就是一个class,只不过它的methodList是+类方法,而普通的class是-实例方法而已。

2.当获取类方法时,只是用的class_getInstanceMethod(class_getMeta(cls),sel)来获取的

        3.meta的rootClass等于本身也就是NSObject   class的rootClass是nil


runtime源码如下

Method class_getInstanceMethod(Class cls, SEL sel){    if (!cls  ||  !sel) return NULL;    return look_up_method(cls, sel, YES/*cache*/, YES/*resolver*/);}/************************************************************************ class_getClassMethod.  Return the class method for the specified* class and selector.**********************************************************************/Method class_getClassMethod(Class cls, SEL sel){    if (!cls  ||  !sel) return NULL;    return class_getInstanceMethod(_class_getMeta(cls), sel);}

4.meta的meta是啥?????元类的元类的啥?

其实就是本身

   

class_t *getMeta(class_t *cls){    if (isMetaClass(cls)) return cls;    else return cls->isa;}


0 0
原创粉丝点击