美文网首页
浅谈objc_object结构

浅谈objc_object结构

作者: 三秋树下 | 来源:发表于2017-08-07 15:38 被阅读61次
    关键词:
    isa
    super_class
    metaClass

    isa:是一个 objc_class 类型的指针
    isa指针指向的其实是类的元类,如果之前的类名为:Person,那么被runtime更改以后的类名会变成:NSKVONotifying_Person。

    super_class:一看就明白,指向该类的父类呗!如果该类已经是最顶层的根类(如 NSObject 或 NSProxy),那么 super_class 就为 NULL。

    在继承层次中,子类,父类,根类(这些都是普通 class)以及其对应的 metaclass 的 isa 与 super_class 之间关系:
    规则一:类的实例对象的 isa 指向该类;该类的 isa 指向该类的 metaclass;
    规则二:类的 super_class 指向其父类,如果该类为根类则值为 NULL;
    规则三:metaclass 的 isa 指向根 metaclass,如果该 metaclass 是根 metaclass 则指向自身;
    规则四:metaclass 的 super_class 指向父 metaclass,如果该 metaclass 是根 metaclass 则指向该 metaclass 对应的类;

    Objc中的object与class的定义如下:

    typedef struct objc_class *Class;

    typedef struct objc_object {
    Class isa;
    } *id
    Class 是一个 objc_class 结构类型的指针;
    id(任意对象) 是一个 objc_object 结构类型的指针,其第一个成员是一个 objc_class 结构类型的指针。


    类对象(class object)与实例对象(instance object

    Objective-C 中的类本质上也是对象,我们称之为类对象。按照我们前面所说的所有的对象都是某个类的实例,那么类对象又是什么类的实例呢?答案就是我们将在下一节介绍的元类。

    在 Objective-C 中有一个非常特殊的类 NSObject ,绝大部分的类都继承自它。它是 Objective-C 中的两个根类(rootclass)之一,另外一个是 NSProxy(本文不讨论)。同样的,我们打开文件 NSObject.h ,可以看到 NSObject 类其实就只有一个成员变量 isa ,所有继承自 NSObject 的类也都会有这个成员变量。

    NSObject的定义

    参考地址:
    深入浅出Cocoa之类与对象
    Objective-C对象模型

    相关文章

      网友评论

          本文标题:浅谈objc_object结构

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