OC对象的分类

2019-05-07  本文已影响0人  六月的某一个早晨

OC中的对象,简称OC对象,主要可以分为3种:

  1. instance对象(实例对象)
NSObject *obj1 = [[NSObject alloc] init];
NSObject *obj2 = [[NSObject alloc] init];
obj1、obj2是NSObject的instance对象(实例对象),它们是不同的两个对象,分别占据着两块不同的内存。
  1. class对象(类对象)
NSObject *obj1 = [[NSObject alloc] init];
NSObject *obj2 = [[NSObject alloc] init];

Class objCls1 = [obj1 class];
Class objCls2 = [obj2 class];
Class objCls3 = [NSObject class];
Class objCls4 = object_getClass(obj1);
Class objCls5 = object_getClass(obj2);
objCls1~ objCls5都是NSObject的class对象(类对象),它们是同一个对象,每个类在内存中有且只有一个class对象。
  1. meta-class对象(元类对象)
Class metaCls = object_getClass([NSObject class]); // Runtime API

注:Class metaCls = [[NSObject class] class]; // 获取到的objectClass是class对象,不是meta-class对象

查看class是否为meta-class
BOOL result = class_isMetaClass([NSObject class]);
两个函数区别:
1.Class object_getClass(id obj)
{
    // obj如果是instance对象,返回class对象
    // obj如果是class对象,返回meta-class对象
    // obj如果是meta-class对象,返回NSObject(基类)的meta-class对象
    if (obj) return obj->getIsa();
    else return Nil;
}

2.Class objc_getClass(const char *aClassName)
{
    // 将一个字符串类名传进去,返回一个类对象
    if (!aClassName) return Nil;

    // NO unconnected, YES class handler
    return look_up_class(aClassName, NO, YES);
}
上一篇 下一篇

猜你喜欢

热点阅读