OC 对象的分类
-
1、instance对象(实例对象)
-
2、class对象(类对象)
-
3、meta-class(元类对象)描述class的对象
-
instance对象是通过类的alloc方法创建出来的对象,每次alloc都是不同的instance对象
instance对象的构成包括:
- isa指针
- 其他的成员变量<比如_age>
![](https://img.haomeiwen.com/i2152217/d1414900aac2ce18.png)
-
class 对象,类对象
获取class对象的方式
#import <objc/runtime.h>
Person *per = [[Person alloc] init];
per->_age = 10;
Class class1 = [Person class];
Class class2 = [per class];
Class class3 = object_getClass(per);
NSLog(@"class1 = %p",class1);
NSLog(@"class2 = %p",class2);
NSLog(@"class3 = %p",class3);
打印结果
class1 = 0x100001348
class2 = 0x100001348
class3 = 0x100001348
对于类对象来说,他们是同一个类对象,每个类在内存中有且只有一个class对象
class对象主要存储的是:
- isa指针
- superclass指针
- 类的属性信息<@property>
- 类的对象信息<对象方法等>
- 类的协议信息
- 类的成员变量信息
- ..........
![](https://img.haomeiwen.com/i2152217/76ea1b943a98e476.png)
meta-class(元类对象)
获取方式:
Class perMetaClass = object_getClass([Person class]);
perMetaClass是Person类的meta-class<元类对象>
meta-class对象和class对象的内存结构是一样的,但是用途不一样,在内存中
存储的信息主要包括
- isa指针
- superclass指针
- 类的 类方法 信息
![](https://img.haomeiwen.com/i2152217/9c83da09d93c3c6a.png)
网友评论