5 OC 中的三种对象

目录

OC 中对象的分类

一  instance 对象

二 类对象

 

三  元类对象

总结:


OC 中对象的分类

 instance 对象

类对象

元类对象

一  instance 对象

内存中包含哪些信息

  1.  isa 指针
  2. 其他成员的变量

 

  Student *stu1 = [[Student alloc]init];

以上的stu1 就是实例对象

 

二 类对象

 以下就是类对象

  1.         Class cls1  = [stu1 class];
  2.         Class cls2  = object_getClass(stu1);
  3.         Class cls3 = [NSObject class];

 

一个类的类对象是唯一的,只有一份,类对象在内存中有什么用呢?

内存中包含的信息

  1. isa 指针
  2. superclass 指针
  3. 类的属性信息(@property),类的对象方法信息(instance method)
  4. 类的协议信息(protocol),类的成员变量信息(ivar)

 

三  元类对象

metaClass

Class metaCls = object_getClass([NSObject class]);

元类对象有什么用呢?

+ (void)test;

 像这种+开头的方法就是放到元类对象中的。

- (void)test;

这种方法是放到类对象中的。

 

元类对象和类对象内存结构是一致的吗,但是就是用途不一样,包含的信息不一样

 

  1. isa 指针
  2. superclass 指针
  3. 类的方法信息
  4. ......

 

使用runtime 判断是否是元类对象 class_isMetaClass

NSLog(@"%d",class_isMetaClass([NSObject class]));

 

 

总结:

 

无论是instance 对象 还是 class 对象 或者是 metaclass 对象,都有一个isa 指针,那么这个isa 指针指向什么地方呢?

1 instance的 isa 指向的是 class

当我们去创建一个类的对象并且去调用对象方法的时候,此时会通过instance 的isa 找到class,从而找到class 里面的对象方法进行执行

2 class 的 isa 指向meta-class

当调用类方法的时候,通过class的isa指针找到meta-class,进行调用类方法。

3 meta-class 的 isa 指向基类的meta-class 对象

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值