isa指针详解

在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;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值