isa分析到元类

通过isa推导class我们分析类isa存储了类信息,我们是否可以对Class的地址再取isa的操作呢?

通过案例我们发现对isa的地址再进行x/4gx时也可以获取到里面的地址值,并同isa的取isa_mask一样结果得到类YDPerson,What this is ?
难道类会和对象一样无限开辟?内存中不止有一个类吗?
于是添加了ydTestClassNum函数来测试类对象内存存在的个数,通过打印发现都为0x1000080f8,证明了类对象在内存中只有一个

问题

0x00000001000080d0是什么?难道是NSObject吗?

通过打印测试发现0x00000001000080d0不是NSObject
通过lldb调试知道对象的isa指向了Class0x00000001000080f8),而Classisa指向了0x00000001000080d0
通过MachOView查看编译好的mach-o文件

通过符号表发现在编译好的mach-o文件中,地址0x00000001000080d0被编译成了MetaClass(元类),这是由系统添加的并且已经编译好了

总结

相同的类在内存中会只存在一份
对象的isa指向了类,类的isa指向了元类

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

推荐阅读更多精彩内容