一、对象的本质
Clang:Clang是一个有Apple主导编写的,基于LLVM的C/C++/Objective-C编译器。功能比gcc更强。
对象在底层被编译成一个结构体。
我们在工程里创建一个LGPerson类,类里添加一个hobby属性。然后在终端里cd到工程main.m目录下执行下面命令生成main.cpp。
clang -rewrite-objc main.m -o main.cpp
打开生成的main.cpp我们可以看到LGPerson类实际上是个结构体
struct LGPerson_IMPL {
struct NSObject_IMPL NSObject_IVARS;
NSString *hobby;
};
那么其中的NSObject_IMPL又是什么呢,我们全局搜索找到了
struct NSObject_IMPL {
Class isa;
};
可以看出其实是个isa。
二、联合体(union) 位域
参考我另外一篇文章:https://blog.csdn.net/miaocuilin/article/details/116600337
联合体就是union,是个结构体。
位域是指当联合体当中的一个值 按位运算,每一段区域的值代表一个参数的值,这一段区域就叫一个位域。
三、ISA结构信息
union isa_t {
isa_t()