iOS - OC中对象的分类

OC中类对象,主要分为一下三种:
(1).instance对象(实例对象)
(2).class对象 (类对象)
(3).meta-class对象(元类对象)
一、instance对象(实例对象)

instance对象是通过类alloc init出来的对象,每次alloc init都会产生新的instance对象。

 Person *person1 = [[Person alloc]init];
 Person *person2 = [[Person alloc]init];

比如:person1和person2是两个不同的对象,分别占据着不同的内存空间。

instance在内存中存储的内存信息包括:
1.isa指针
2.其它成员变量
.......

二、class对象 (类对象)

通过以下方法可以获得类对象,每个类在内存中有且只有一个class对象。

class对象在内存中存储的信息主要包括:
1.isa指针
2.superclass指针
3.类的属性信息,类的对象方法信息等
.......

   Class personClass1 = [person1 class];
   Class personClass2 = [Person class];
   Class personCalss3 = object_getClass(person1);
   NSLog(@"---personClass1:%p",personClass1);
   NSLog(@"---personCalss2:%p",personClass2);
   NSLog(@"---personCalss3:%p",personCalss3);

输出结果如下:

2020-01-04 14:21:07.039798+0800 ClassDemo[7590:109290] ---personClass1:0x10c03c588
2020-01-04 14:21:07.039966+0800 ClassDemo[7590:109290] ---personCalss2:0x10c03c588
2020-01-04 14:21:07.040110+0800 ClassDemo[7590:109290] ---personCalss3:0x10c03c588
三、meta-class对象(元类对象)

每个类在内存中只要一个meta-calss类。

meta-class在内存中存储的主要信息:
1.isa指针
2.superclass指针
3.类的类方法信息
......
例:

   Person *person1 = [[Person alloc]init];
   Class personClass1 = [person1 class];
  // 元类对象
   Class metaClass = object_getClass(personClass1);
   NSLog(@"---personClass1:%p",personClass1);
   NSLog(@"---metaClass:%p",metaClass);

输出结果如下:

2020-01-04 14:41:00.913734+0800 ClassDemo[8504:147077] >---personClass1:0x1043e4588
2020-01-04 14:41:00.913919+0800 ClassDemo[8504:147077] >---metaClass:0x1043e4560

【小结】:
下面这张图诠释了isa和superclass的精髓。

1672235-0cf36971350bcbd8.jpg
01.jpg

isa
instance(实例)对象的ISA指向Class(类)对象。
class对象的ISA指向meta-class(元类)对象。
meta-class对象的ISA指向基类meta-class.

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

OC中类对象的学习记录在这里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值