我们知道Objective-C是面向对象的一门语言,那么Objective-C中的对象,可以分为3种
instance对象(实例化对象)
1.所谓的instance对象就是通过类alloc出来的对象,在我们每次调用alloc都会产生新的instance对象
NSObject * object1 = [[NSObject alloc] init];
NSObject * object2 = [[NSObject alloc] init];
通过lldb指令我们在控制台可以打印出实例话对象的地址:如下
(lldb) p object1
(NSObject *) $0 = 0x000060000001a060
(lldb) p object2
(NSObject *) $1 = 0x4089600000000000
可以发现:object1,object2分别分配着不同的内存
2.instance对象在内存中存储的信息包括
- isa指针
- 其他成员变量
class对象(类对象)
NSObject * object1 = [[NSObject alloc] init];
NSObject * object2 = [[NSObject alloc] init];
Class objectClass1 = [object1 class];
Class objectClass2 = [object1 class];
Class objectClass3 = [NSObject class];
//runtime api
Class objectClass4 = object_getClass(object1);
Class objectClass5 = object_getClass(object1);
1.objectClass1~objectClass5都是NSObject的class对象
2.他们都是同一个对象,每个类在内存中有且只有一个class对象
3.class对象在内存中存储的信息主要baok
- isa指针
- superClass指针
- 类的属性信息(@property),类的对象方法信息(instance method)
- 类的协议信息(protocol),类的成员变量信息(ivar)
-......
meta-class(元类对象)
// 用runtime api获取的meta-class对象
Class objectMetaClass = object_getClass([NSObject class]);
// 获取的是class对象(类对象)
Class objectClass = [[NSObject class] class];
1.objectMetaClass是NSObject的meta-class对象(元类对象)
2.每个类在内存中有且只有一个meta-class对象
3.meta-class对象和class对象的内存结构是一样的,但是用途不一样,在内存中存储的信息主要包括
- isa指针
- superclass指针
- 类的类方法信息(class method)
- ......
本文则是OC对象的分类,在接下来会继续带你了解isa指针
如果喜欢,记得点赞哦
网友评论