• 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。

  • 相关阅读:
    http强转https websocket
    apache http添加证书转成https
    insert into
    分割字符串和截取字符串:split 和substring
    java实现http请求
    Oracle 中 decode 函数用法
    LeetCode:154. 寻找旋转排序数组中的最小值 II
    LeetCode:153. 寻找旋转排序数组中的最小值
    LeetCode:151. 翻转字符串里的单词
    LeetCode:145. 二叉树的后序遍历
  • 原文地址:https://www.cnblogs.com/gattaca/p/6073115.html
Copyright © 2020-2023  润新知