opensource.apple.com/source
[#include](fsnotes://open/?tag=include) "isa.h"
union isa_t {
isa_t() { }
isa_t(uintptr_t value) : bits(value) { }
uintptr_t bits;
private:
// Accessing the class requires custom ptrauth operations, so
// force clients to go through setClass/getClass by making this
// private.
Class cls;
public:
[#if](fsnotes://open/?tag=if) defined(ISA_BITFIELD)
struct {
ISA_BITFIELD; // defined in isa.h
};
bool isDeallocating() {
return extra_rc == 0 && has_sidetable_rc == 0;
}
void setDeallocating() {
extra_rc = 0;
has_sidetable_rc = 0;
}
[#endif](fsnotes://open/?tag=endif)
void setClass(Class cls, objc_object *obj);
Class getClass(bool authenticated);
Class getDecodedClass(bool authenticated);
};
isa_t() { } > 无参数的构造函数
isa_t(uintptr_t value) : bits(value) { } >> 有参数的构造函数
构造函数,主要用来在创建对象时初始化对象,即为对象成员变量赋初值。命名和类名相同,不可直接调用, 创建对象自动调用。 如果创建一个类,没有写构造函数,会自动生成无参数的构造函数。
# define ISA_MASK 0x00007ffffffffff8ULL
# define ISA_MAGIC_MASK 0x001f800000000001ULL
# define ISA_MAGIC_VALUE 0x001d800000000001ULL
# define ISA_HAS_CXX_DTOR_BIT 1
# define ISA_BITFIELD \
uintptr_t nonpointer : 1; \
uintptr_t has_assoc : 1; \
uintptr_t has_cxx_dtor : 1; \
uintptr_t shiftcls : 44; /*MACH_VM_MAX_ADDRESS 0x7fffffe00000*/ \
uintptr_t magic : 6; \
uintptr_t weakly_referenced : 1; \
uintptr_t unused : 1; \
uintptr_t has_sidetable_rc : 1; \
uintptr_t extra_rc : 8
nonpointer --- 0 代表普通的指针,存储这class meta-class对象的内存地址,1 代表优化过,使用位域存储更多的信息
has_assoc --- 是否设置过关联对象,如果没有,释放时会更快
has_cxx_dtor --- 是否有c++的析构函数 ,如果没有,释放的会更快
shiftcls --- 存储着class,meta_class 对象的内存地址
magic --- 用于在调试时分辨对象是否未完成初始化
weakly_referenced --- 是否被弱引用指向过,如果没有,释放的会更快
has_sidetable_rc --- 引用计数器是否过大无法存储在ISA中,如果是1 那么引用技术会存储在一个叫sidetable的类的属性中
extra_rc --- 里面存储的值是引用计数器减1
unused --- 是否被释放
uintptr_t == typedef unsigned long int uintptr_t; ## 它是一个与指针大小完全相同的无符号整数类型
c 语言包含的数据类型
基本类型 ’. 数值类型(整,浮点型) ‘ '.字符类型char'
构造类型 数组, 结构体 共用体 枚举enum
指针类型
空类型(void)
结构体和联合体(共用体)
结构体是struct 标识,所占内存为所有成员变量占用大小之和或者大于
联合体是union 标识,所占内存为最大成员变量大小的值
区别:结构体的成员会占不同的内存,互相之间不影响,而共用体的所有成员占用同一内存,修改一个成员会影响到其余所有成员。
格式: union 共用体名{
成员列表
};
eg:(注意内存对齐)
网友评论