OC 对象 可以分为三种
- 实例对象 instance 对象
- 类对象 class 对象
- 元类对象 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 对象中 储存的信息 都有什么 ?
存放 只有一份的东西
-
isa 指针
-
superClass 指针
-
类的属性信息 (@property)
-
类的方法信息 (instance method) 减号方法 - (void) method{}
-
类的协议信息 (protocol)
-
类的成员变量信息 (ivar) 仅描述信息(类型 int bool .. 名称_age _name) 不包含值
meta -calss 元类对象
其实也叫类对象
objc_getClass 属于runtime 函数
Class objcMetaCalss = objc_getClass(传入类对象 [CLass class])
得到的 是元类对象
每个类在内存中有且只有一个 元类 meta-class 对象 meta-class 对象额和calss 内存结构是一样的 但是 用途不一样
元类对象在内存中,其中包含什么信息
- isa 指针
- superClass 指针
- 类方法信息 +(void)method;
其他 信息 全是 null 只存类方法信息
判断 是否是元类对象 class_ismetaCalsss()
对象的isa 指针指向哪里 ?
oc 类信息存放在哪里 ?