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指向了元类

你可能感兴趣的:(isa分析到元类)