runtime之metaClass

网络上有一张经典的图,如下:
在这里插入图片描述
这张图的大概意思就是:实例对象的isa指针指向其类,该类的isa指针指向其元类(MetaClass),而其元类的isa指针指向NSObject的元类,而NSObject的元类的isa指针指向自己。
下面通过代码来证明一下正确性:

        NSObject *obj = [[NSObject alloc] init ];  //实例化一个NSObject对象
        Class objClass = [obj class];  //获取该实例对应的类
        Class metaClass1 = object_getClass(objClass); //获取该类对应的元类
        Class metaClass2 = object_getClass(metaClass1); //获取该元类的元类
        //打印地址
        NSLog(@"obj: %p",obj);
        NSLog(@"objClass: %p",objClass);
        NSLog(@"metaClass1: %p",metaClass1);
        NSLog(@"metaClass2: %p",metaClass2);

运行结果如下:

2021-03-15 23:32:40.304400+0800 Person[41519:4009886] obj: 0x1059052a0
2021-03-15 23:32:40.305073+0800 Person[41519:4009886] objClass: 0x7fff88999cc8
2021-03-15 23:32:40.305125+0800 Person[41519:4009886] metaClass1: 0x7fff88999ca0
2021-03-15 23:32:40.305183+0800 Person[41519:4009886] metaClass2: 0x7fff88999ca0
Program ended with exit code: 0

从打印结果来看,metaClass1与metaClass2指向的地址是一样的,这也就证明了NSObject的元类的isa指针指向自己。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值