iOS打印isa指针

void printIsa(id obj){
    struct IsaObjc {
        long isa;
    };
    long p = ((__bridge struct IsaObjc *)obj) -> isa;
    int endFlag = 45;
#if __x86_64__
    endFlag = 56;
#endif
    NSLog(@"\n\
          isa: 0x%lx  \n\           // isa
          nonpointer: %ld \n\   // 64位都是1
          has_assoc: %ld \n\  // 
          has_cxx_dtor: %ld \n\
          shiftcls: 0x%lx \n\    // 真实的类对象地址
          magic: 0x%lx \n\     // 魔数
          weakly_referenced: %ld \n\   // 是否存在弱引用
          deallocating: %ld \n\          // 是否正在释放
          has_sidetable_rc: %ld \n\   // 是否有在SideTables存储强引用count
          extra_rc: %lu ",              // isa存储引用count,满了后移动一部分到SideTables,自身保留2^18(mac 2^7), 保证性能。
          p,
          p & 0x1,
          (p & 0x2) >> 1,
          (p & 0x4) >> 2,
          (p & 0x00007ffffffffff8),
          (p & 0x001f800000000001) >> (endFlag - 6),
          (p & 0x0020000000000000) >> (endFlag - 3),
          (p & 0x0040000000000000) >> (endFlag - 2),
          (p & 0x0080000000000000) >> (endFlag - 1),
          (p & 0xff00000000000000) >> endFlag);
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容