objc_getClass()、object_getClass()、objc_getMetaClass()、[id class]区别

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    // 根据字符串返回类对象
    // Class _Nullable objc_getClass(const char * _Nonnull name)
    Class class1 = objc_getClass("ViewController");
    // 返回对象的isa指针
    // Class _Nullable object_getClass(id _Nullable obj)
    /*
     eg:参数为实例对象返回类对象
     eg:参数为类对象返回元类对象
     eg:参数为元类对象返回根元类对象
     eg:参数为根元类对象返回自身
     */
    // 返回类对象
    Class class2 = object_getClass(self);
    // 返回元类对象
    Class class21 = object_getClass(class2);
    // 返回根元类对象
    Class class22 = object_getClass(class21);
    // 返回根元类对象自身
    Class class23 = object_getClass(class22);
    // 总是返回类对象
    Class class3 = [self class];
    // 总是返回元类对象 Class _Nullable objc_getMetaClass(const char * _Nonnull name)
    Class class4 = objc_getMetaClass("ViewController");
    // 返回自身
    Class class5 = [class3 class];

}
测试demo.png

输出结果.png

[id class]的内部实现

+ (Class)class {
return self;
}

- (Class)class {
return object_getClass(self);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容