OC对象的分类

2020-02-19  本文已影响0人  天津的树懒

iOS中OC对象可以分为如下的三种:

1、instance对象(实例对象):

(1)这种类型的对象是通过类alloc出来的对象,每次调用alloc方法,都会产生一个新的instance对象,然后系统就会给这个新对象分配一块内存空间来存储它;
(2)instance对象可以有多个,每alloc出来一个对象就是一个新的instance对象;
(3)instance对象在内存中存储的信息包括:

2、class对象(类对象):

(1)每个类只有一个class对象;
(2)class对象在内存中存储的信息包括:

3、meta-class对象(元类对象):

(1)每个类在内存中有且只有一个meta-class对象;
(2)meta-class对象在内存中存储的信息包括:

OC对象的三种类型

相关代码:

#import <Foundation/Foundation.h>
#import <objc/runtime.h>

//自定义Person类
@interface Person : NSObject
{
    int _age;
    int _height;
    int _no;
}
@end

@implementation Person

@end

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        /**
         获取instance对象:
         下面获取到的两个instance对象是不同的两个对象。
         */
        NSObject *object = [[NSObject alloc] init];
        NSObject *object1 = [[NSObject alloc] init];
        NSLog(@"instance对象:%p, %p", object, object1);
        
        /**
         获取class对象:
         通过下面几种方式获取到的class对象是同一个对象,每个类在内存中有且只有一个类对象。
         */
        Class objectClass = [object class];
        Class objectClass1 = [object1 class];
        Class objectClass2 = [NSObject class];
        Class objectClass3 = object_getClass(object);
        Class objectClass4 = object_getClass(object1);
        NSLog(@"class对象:%p, %p, %p, %p, %p", objectClass, objectClass1, objectClass2, objectClass3, objectClass4);
        
        /**
         获取meta-class对象:
         1、在object_getClass函数中传入的是class对象,则获取到的是meta-class对象,每个类在内存中有且只有一个meta-class对象;
         2、在object_getClass函数中传入的是instance对象,则获取到的是class对象;
         3、在object_getClass函数中传入的是meta-class对象,则获取到的是NSObject(基类)的meta-class对象。
         */
        Class objectMetaClass = object_getClass([NSObject class]);
        NSLog(@"meta-class对象:%p", objectMetaClass);
        
        //用class_isMetaClass函数来判断传进来的参数是不是meta-class对象。
        BOOL isMetaClass = class_isMetaClass(objectMetaClass);
        NSLog(@"%d", isMetaClass);
    }
    
    return 0;
}

Github Demo

”三人行,必有我师焉“, 欢迎各位批评指正。
如果您还觉得我写的不错的话请您点赞加关注,您的肯定是我前进的最大动力!
我是爱学习也爱您的树懒O(∩_∩)O

上一篇下一篇

猜你喜欢

热点阅读