四、类的本质
联合体的互斥
isa的结构为联合体+位域的结构,以达到直接操作二进制位的目的,节约了内存。如果使用属性的话,会浪费好多内存。
union(联合体)特性:属性是互斥的,所有属性的地址都是联合体的首地址。联合体的大小等于属性中最大的那个属性的大小。适合变量大小差不多,并且不会同时用到的情况;
联合体可以方便的实现位操作。有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便。
联合体+结构体(位域)的方法可以更加方便的操作二进制位。
所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同的对象用一个字节的二进制位域来表示。
struct(结构体)特性:所有的变量是共存的。struct的内存空间分配是粗放的,不管用不用,全分配。
类和元类的创建时间: 编译期创建。
验证方法:
1.在main方法中或者load方法中使用lldb打印类和元类的指针;
2、build后生成可执行文件,使用MachOView查看可执行文件内容,可以找到对应的类信息。
class类型
真正类型是objc_class类型(struct),objc_class又继承自objc-object(isa);
NSObject和objc_object区别:NSObject oc对象基类,objc_object(结构体)底层c语言的基类。









网友评论