01 - OC对象的分类

我们知道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指针
如果喜欢,记得点赞哦

你可能感兴趣的:(01 - OC对象的分类)