美文网首页OC原理知识
01 - OC对象的分类

01 - OC对象的分类

作者: MrBMask | 来源:发表于2018-08-02 23:17 被阅读0次

    我们知道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对象的分类

        本文链接:https://www.haomeiwen.com/subject/ialevftx.html