在arm64之前,isa是一个普通的指针,存储着class和meta-class的内存地址
从arm64之后,isa指针变成了一个共用体,还使用位域来存储更多的信息
取值:取哪一位,哪一位为1,其他为0,取&,例如:取出1101中的第二个1
0000 1101
&0000 0100(取值的那位置为1,其他位为0,取&)(掩码mask)
0000 0100
赋值:赋0,例如将1101中第二个1,置为0
0000 1101
&1111 1011(赋值位为0,其他位置为1,取&)(掩码mask)
0000 1001
赋值:赋1,例如将1001中第一个0,置为1
0000 1001
| 0000 0100(赋值位为1,其他位置为0,取|)(掩码mask)
0000 1101
用结构体来取代多个mask 的定义
struct {
char first : 1;
char second:1;
char third:1
}Mask;
共用体
union {
char bites;//(结构体大于一个字节的时候使用int,long等)
struct{
char first : 1;
char second:1;
char third:1
}
}Mask;