zoukankan      html  css  js  c++  java
  • 一个Objective-C对象如何进行内存布局?(考虑有父类的情况)

    1.对象isa指向类对象,类对象的isa指向元类。元类isa指向根元类。根元类的isa指针指向自己,superclass指针指向NSObject类

    2.实例对象结构体只有一个isa变量,指向实例对象所属的类。类对象有isa,superclass,方法,属性,协议列表,以及成员变量的描述。

    3.所有的对象调用方法都是一样的,没有必要存在对象中,对象可以有无数个,类对象就有一个所以只需存放在类对象中

        

     

    可以从官方objc.h源码里面找到实例定义

        /// Represents an instance of a class.

        struct objc_object {

            Class _Nonnull isa  OBJC_ISA_AVAILABILITY;

        };


    可以在runtime.h里面找到类对象的定义

        

        struct objc_class {

            Class _Nonnull isa  OBJC_ISA_AVAILABILITY;

            

    #if !__OBJC2__

            //向该类所继承的父类对象

            Class _Nullable super_class                              OBJC2_UNAVAILABLE;

            const char * _Nonnull name                               OBJC2_UNAVAILABLE;

            long version                                             OBJC2_UNAVAILABLE;

            long info                                                OBJC2_UNAVAILABLE;

            long instance_size                                       OBJC2_UNAVAILABLE;

            //成员变量列表

            struct objc_ivar_list * _Nullable ivars                  OBJC2_UNAVAILABLE;

            //方法列表

            struct objc_method_list * _Nullable * _Nullable methodLists                    OBJC2_UNAVAILABLE;//方法列表

            //用于缓存调用过的方法

            struct objc_cache * _Nonnull cache                       OBJC2_UNAVAILABLE;

            //协议链表用来存储声明遵守的正式协议

            struct objc_protocol_list * _Nullable protocols          OBJC2_UNAVAILABLE;

    #endif

            

        }

  • 相关阅读:
    linux c编程操作数据库(sqlite3应用)
    Silverlight-MEF-DEMO
    微软最有价值专家分享校园招聘心得体会
    C# IOCP服务器项目(学习)
    ASIHTTPRequest类库简介和使用说明
    用Python下载美国国家气候数据中心(NCDC)的气候数据
    20个大家应该知道的大数据资源
    分布式文件系统HDFS,大数据存储实战(一)
    vmware虚拟的ubuntu18.04死机,尝试关闭时关机报“虚拟机xxx繁忙”
    ubuntu下hadoop0.20.2报错/dfs/name is in an inconsistent state
  • 原文地址:https://www.cnblogs.com/huangzs/p/7574180.html
Copyright © 2011-2022 走看看