03-iOS底层学习 | OC对象

144 阅读1分钟
概述

OC对象分为三种:

  • instance对象(实例对象)
  • Class对象(类对象)
  • meta-class(元类对象)

一. instance对象(实例对象)

instance对象是类调用alloc方法产生新的实例方法

  • alloc:分配内存
  • init:初始化
  • 一个类及其子类添加方法不会影响instance对象内存分配
  • 一个类及其子类添加成员变量或属性会影响instance对象内存分配 实例对象在内存中存储的信息:
  • isa指针
  • 成员变量的值

二. Class对象(类对象)

每个类在内存中有且仅有一个类对象

类对象在内存中存储的信息:

  • isa指针
  • superclass指针
  • 属性信息
  • 实例方法
  • 协议信息
  • 成员变量信息(名称,类型)

三. meta-class(元类对象)

meta-class存储信息:

  • isa指针
  • superclass指针
  • 类方法信息

isa指针.png

isa指针流程.png

isa指针

  • instance的isa指向class,当调用对象方法时,通过instance的isa找到class,最后找到对象方法的实现进行调用
  • class的isa指向meta-class,当调用类方法时,通过class的isa找到meta-class,最后找到类方法的实现进行调用
  • meta-class的isa指向基类的meta-class
  • 基类的isa指向自己
  • isa找到class,方法不存在,就通过superclass找父类class调用类方法的轨迹
  • isa找meta-class,方法不存在,就通过superclass找父类

superclass指针

  • class的superclass指针指向父类的class,如果没有父类,superclass指针为nil
  • meta-class的superclass指向父类的meta-class,基类的meta-class的superclass指向基类的class