美文网首页
类的结构

类的结构

作者: 算命的李老师 | 来源:发表于2020-03-17 15:13 被阅读0次
(Class superClass.png
==objc_class==
struct objc_class {

Class isa  OBJC_ISA_AVAILABILITY;

#if !__OBJC2__

Class super_class                       OBJC2_UNAVAILABLE;  // 父类

const char *name                        OBJC2_UNAVAILABLE;  // 类名

long version                            OBJC2_UNAVAILABLE;  // 类的版本信息,默认为0

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 指针==

我们创建的一个对象或实例其实就是一个 struct objc_object 结构体,而我们常用的id也就是这个结构体的指针。
这个结构体只有一个成员变量,这是一个Class类型的变量isa,也是一个结构体指针。
对象的isa指针就指向对象所属的类。

==元类==

元类的定义:元类是类对象的类。
struct objc_classs 结构体里存放的数据称为元数据(metadata),里面存放有指向父类的指针、类的名字、版本、实例大小、实例变量列表、方法列表、缓存、遵守的协议列表等

==类对象==

Class本身其实也是一个对象,我们称之为类对象。
类对象在编译期产生用于创建实例对象,是单例

NSString *str = @"Hello World";

str对象本质就是一个
objc_object结构体,而这个结构体的成员变量isa指针则表明了str is a NSString,因此这个isa就指向了NSString类,这个NSString类其实是类对象。
类对象的isa指针指向的我们称之为元类(metaclass)

==类簇==

类簇实际上是Foundation framework框架下的一种设计模式,它管理了一组隐藏在公共接口下的私有类。
如图 NSNumber就是个类簇
[图片上传失败...(image-9851e1-1584429110930)]

==分类==
  • 分类是不能添加属性的,只能关联属性。
  • 是在在类中用二维数组维护。
  • 当程序启动时,就会加载项目中所有的类和分类,而且加载后会调用每个类和分类的+load方法,只会调用一次
  • 在初始化的时候,如果在分类中重写了+initialize方法,则会覆盖掉父类的

分类为什么用二维数组存储

==关联对象==

关联对象由AssociationsManager 管理并在AssociationsHashMap存储。这是一个全局的容器。

==isa指向==
  • 实例对象isa指针指向类对象
  • 类对象的isa指针指向了元类
  • 元类isa指向根元类
  • 根元类isa指向自己
==super_class指向==
  • super_class指针指向了父类的类对象
  • 元类的super_class指针指向了父类的元类

相关文章

  • 类的结构

    愿编程让这个世界更美好

  • 类的结构

    1.术语 --实例 1.使用面对对象开放,第一步是设计类 2.使用 类名() 创建对象,创建对象的动作有两步 2....

  • 类的结构

    ==objc_class== ==isa 指针== 我们创建的一个对象或实例其实就是一个 struct objc_...

  • runtime常用方法

    类 类结构 类实例结构 常用函数 方法 结构 类方法的常用函数 方法的常用函数 方法选择器 动态创建类 示例: 动...

  • 多线程基础(十三):java中的FutureTask

    [toc] FutureTask源码分析 1.类结构及常量、变量 1.1 类结构 FutureTask类结构如下:...

  • 结构型开发模式-适配器模式

    结构型模式概述 结构型模式分为 类结构模式 和 对象结构模式 类结构模式只关心类的组合,有多个类可以组成一个...

  • iOS底层 -- Runtime之Class底层结构

    一、Class结构 类、元类对象的本质结构都是struct objc_class 类对象和元类对象的结构其实非常相...

  • 类文件结构【Class类文件的结构】

    概述 任何一个Class文件都对应着唯一一个类或接口的定义信息,但反过来,类或接口并不一定都得定义在文件里(如类或...

  • java线程池(八):ForkJoinPool源码分析之四(Fo

    [toc] 1.类结构及其成员变量 1.1 类结构和注释 类结构代码如下: ForkJoinWorkerThrea...

  • 第九章 类和结构体

    c++中,结构体是稍有不同的类,类能做的,结构体也可以; 而swift中,结构体与类有较大区别, 结构体与类的区别...

网友评论

      本文标题:类的结构

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