OC 基础 - Class的分类

136 阅读1分钟

OC 对象 可以分为三种

  1. 实例对象 instance 对象
  2. 类对象 class 对象
  3. 元类对象 meta-class 对象

前两篇文章所提的allock init 对象的 本质 是说的 实例对象的本质 也就是 instance 对象的本质

alloc init 出来的 都是 instance对象

每次通过 alloc init 都会分配新的内存

instance 对象

在内从中存储的信息包括

{ isa 指针 始终排在 内存地址最前面, 所以ISA的内存地址就是 instance 的内存地址 其他成员边变量 }

**class 对象 **

NSObject *objc = [nsobjc alloc]init

Class class= [objc class] Class class2 [class class] class class3 = [nsobjc calsss]

class class 4 = ogjc_getClass (objc)

nslog (@"%p%p%p%p", class, class1,calss2.calss3)

地址是相同的

一个类的类对象 在内存中只有一份

class 对象中 储存的信息 都有什么 ?

存放 只有一份的东西

  1. isa 指针

  2. superClass 指针

  3. 类的属性信息 (@property)

  4. 类的方法信息 (instance method) 减号方法 - (void) method{}

  5. 类的协议信息 (protocol)

  6. 类的成员变量信息 (ivar) 仅描述信息(类型 int bool .. 名称_age _name) 不包含值

meta -calss 元类对象

其实也叫类对象

objc_getClass 属于runtime 函数

Class objcMetaCalss = objc_getClass(传入类对象 [CLass class])

得到的 是元类对象

每个类在内存中有且只有一个 元类 meta-class 对象 meta-class 对象额和calss 内存结构是一样的 但是 用途不一样

元类对象在内存中,其中包含什么信息

  1. isa 指针
  2. superClass 指针
  3. 类方法信息 +(void)method;

其他 信息 全是 null 只存类方法信息

判断 是否是元类对象 class_ismetaCalsss()

对象的isa 指针指向哪里 ?

oc 类信息存放在哪里 ?