OC中有3种对象,分别是1.实例对象,2.类对象,3.元类对象

1.instance(实例对象)


里面存放isa以及具体的值.isa地址就是这个对象的地址.


2. class(类对象)

在这里插入图片描述

属性信息 :


3.meta-class(元类对象)

在这里插入图片描述


4.注意

以下代码获取objcetClass是class对象,并不是meta-class对象

Class objectClass = [[NSObject class] class];
//获取的一直是类对象.
  • -(Class)class、+(Class)class;

返回的就是类对象

- (Class) {
    return self->isa;
}

+ (Class) {
    return self;
}

5. objc_getClass & object_getclass

  1. Class objc_getClass(const char *aClassName)
  1. 传入字符串类名
  2. 返回对应的类对象
// objc_getClass(<#const char * _Nonnull name#>)

//  NSString *className = @"MyClassName";
//  Class myClass = objc_getClass(className.UTF8String);

Class className1 = objc_getClass("NSObject");
NSLog(@"%@ -- %@ -- %@",className1,[NSObject class],object_getClass([NSObject class]));
// NSObject -- NSObject -- NSObject
  1. Class object_getClass(id obj)

1.传入的obj可能instance对象,class对象,meta-class对象
2.返回值
a. 如果是instance对象,返回class对象
b. 如果是class,返回meta-class对象
c. 如果是meta-class对象,返回NSObject(基类)的meta-class对象

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注