zoukankan      html  css  js  c++  java
  • Objective-C对象模型

    Objective-C是一门面向对象的编程语言,每一个对象都是一个类的实例。XCode中打开objc.h可以看到如下定义:

    /// An opaque type that represents an Objective-C class.
    typedef struct objc_class *Class;
    
    /// Represents an instance of a class.
    struct objc_object {
        Class isa  OBJC_ISA_AVAILABILITY;
    };
    
    /// A pointer to an instance of a class.
    typedef struct objc_object *id;

    每个对象包含一个isa指针,指向该对象的类。XCode中打开runtime.h可以看到类的定义:

    struct objc_class {
        Class isa  OBJC_ISA_AVAILABILITY;
    
    #if !__OBJC2__
        Class super_class                                        OBJC2_UNAVAILABLE;
        const char *name                                         OBJC2_UNAVAILABLE;
        long version                                             OBJC2_UNAVAILABLE;
        long info                                                OBJC2_UNAVAILABLE;
        long instance_size                                       OBJC2_UNAVAILABLE;
        struct objc_ivar_list *ivars                             OBJC2_UNAVAILABLE;
        struct objc_method_list **methodLists                    OBJC2_UNAVAILABLE;
        struct objc_cache *cache                                 OBJC2_UNAVAILABLE;
        struct objc_protocol_list *protocols                     OBJC2_UNAVAILABLE;
    #endif
    
    } OBJC2_UNAVAILABLE;

    类也包含一个isa指针。可以看出,类也是一个对象。那么类的类是什么呢?在OC中,类的类称为元类(metaclass)。

    元类也是一个对象,也有isa指针。元类的isa指针指向元类的类,根元类(root metaclass)。

    根元类也有isa指针,只是根元类的isa指针指向自己。上图说话。

    这里,可以把Root class看成NSObject。

  • 相关阅读:
    Cocos2d-x之CCMenu理解
    【问题记录】mysql设置任意ip访问
    kafka eagle 使用教程
    查看Android源码和源码布局
    JAVA问题之泛型数组
    Linux面试题汇总答案(转)
    从源码看Azkaban作业流下发过程
    Azkaban源码学习笔记
    Java多线程基础学习(二)
    Java多线程基础学习(一)
  • 原文地址:https://www.cnblogs.com/gattaca/p/6073115.html
Copyright © 2011-2022 走看看