美文网首页
1.iOS runtime之MetaClass

1.iOS runtime之MetaClass

作者: 秦砖 | 来源:发表于2016-10-30 21:51 被阅读51次

泛形

我们知道在C/C++中void可以用来表示任何类型的对象,而在iOS中同样有个泛形的关键字id。二者有着相似的功能,但从本质上来说,他们确有着巨大的区别。void的背后是C/C++的那套指针体系,而id的背后则是整个OC的runtime机制。

类与对象

OC类Class的定义代码如下:

typedef struct objc_class *Class;
struct objc_class {
    Class isa;
    Class super_class;
    struct objc_method_list **methodLists
    /* followed by runtime specific details... */
};

super_class指的就是该类的基类,methodLists则是类的方法列表,包含了该类中的所有实例方法,而isa就是我们常说的元类了。那么这个元类是干什么用的呢,isa中的methodLists中包含了类的所有静态方法。

OC中对象也是有定义的,定义代码如下:

typedef struct objc_object *id;
struct objc_object {
    Class isa;
};

注意这里也同样有一个isa,它指向的正是类结构的具体定义。根据这个isa中,一个对象便可以调用到一个类中所有的方法:

  • 当调用类的实例方法时,会在类的方法列表methodLists中查找该方法
  • 当调用类方法时,会在元类的方法列表methodLists中查找该方法。

类继承体系

说了这么久,MetaClass的类是什么呢?所有的元类都使用根元类作为它的类,也就是说所有继承自NSObject的类的元类都会以NSObject的元类作为类。NSObject的元类就是根元类,根元类的元类就是它自己。

类用super_class指向自己的基类,同样,元类也用自己的super_class指向类的super_class的元类。而根元类的super_class则指向了NSObject,这样类的isa与super_class实质上都是NSObject类的子类,而NSObject也因此成为了iOS类继承体系中最根本的类。有一张图能够更清晰的展示这些关系: iOS类继承体系

结语

元类只是iOS类继承体系中的一环,只是一个普通的NSObject类。后续也会对runtime的其它功能作出相应的分析。

相关文章

  • 1.iOS runtime之MetaClass

    泛形 我们知道在C/C++中void可以用来表示任何类型的对象,而在iOS中同样有个泛形的关键字id。二者有着相似...

  • Runtime专题

    参考资料 1、iOS Runtime详解 2、iOS runtime 之 Class 和 MetaClass 3、...

  • Runtime api 使用

    Runtime api 类 /** Creates a new class and metaclass. @par...

  • 一、OC对象模型

    iOS runtime 之 Class 和 MetaClass首先,对象、类和元类的概念,看下面的图和代码可以了解...

  • runtime 之 Class 和 MetaClass

    首先说明,这篇文章几乎都是抄录的别人的博客,简书文章,在此总结,只是为了方便记忆和以后阅读,如果有什么失礼的地方,...

  • runtime---ivar值真正的内存地址

    前言 一提起runtime,大家都会想起class , isa, metaclass, methodList, ...

  • 文章快速索引目录

    1.Ios --1.Ios面试复习 0.C语言中的指针 1.RunLoop 2.Runtime ...

  • iOS runtime 之 Class 和 MetaClass

    Objective-C 是 C 的超集,提供了面向对象的机制,而面向对象思想里有两个重要的概念类和实例。那么 Ob...

  • Runtime:元类(metaclass)

    (看这遍文章之前,需要对Objective-C的Runtime有一定的了解) 在学习OC的runtime机制时候,...

  • Runtime相关问题

    1. 介绍下runtime的内存模型(isa、对象、类、metaclass、结构体的存储信息等) objc4-77...

网友评论

      本文标题:1.iOS runtime之MetaClass

      本文链接:https://www.haomeiwen.com/subject/akzyuttx.html