OC的一门面向政策的开发言语,是由C,C++,汇编混编而成,那么政策的实质是什么,在底层的结构是什么样的,值得我们探究。
政策的实质
在main.m中创立一个S架构师需求把握哪些常识wwPerson
政策,通过xcrun
指令编译成c++
。
xcrun -sdk iphoneos clang -arch arm64 -rewrite-源码买卖网站源码ob源码编辑器jc main.m架构师 -o main_arm64.cpp
翻开main_arm64.cpp文件,找到SwwPerson,可变量是什么意思以看出政策的实质便是变量英文结构体,政策的承继便是父类作为成员变量,一切政策的结构体的类型都是objc_object
typedef struct objc_o架构师和程序员的差异bject SwwPerson;
struct SwwPerson_IMPL {
struct NS源码网站O源码码头bject_IMPL NSObject_IVARS;
NSString *_SwwName;
};
objc_object
是只包含一个成员变量isa
的结构体
s变量值truct objc_object {
Class _Non变量与函数null isa __attribute__((deprecated));
};
我们常用的id
类型,是实质是一个结构体架构师指针
typedef struct objc_objec源码网站t *id;
类Class架构是什么意思
的结构体类型是objc_class
,也是一个结构体指针
typedef struct objc_clas变量是什么意思s *Class;
i架构师需求把握哪些常识sa
位源码本钱域
在程序中,某些信息存储时不需求一个无缺的字节,只需源码之家要几位,为节约存储空间C言语支撑“位域”的结构体架构规划。下面界说了一个结构体和一个位域,结构源码本钱体的巨细为1源码编辑器编程猫2字节,位域的巨细为4字节(最宽根柢类型成员巨细的整数倍),位域架构师内部的存储有自己的规则,有喜爱的同学能够自行百度。
//结构体
struct str1
{
int a;
int b;
int c;
};
//源码之家位域
struct str2
{
int a:1;
int b:2;
int c:6;
};
联合体(共用体)
联合体union和结构体struct在类型界说、变量架构是什么意思界说、运用方法上很相似。但是联合体内源码买卖网站源码部成员是互斥的,他们共用一块内存地址。union的sizeof测到的巨细实践是union中各个元素里面占内存最大的那个元素的巨细。
union uni
{
int a;
int b;
int c;
}
isa
isa的结构是isa_t,是一架构师和程序员的差异个联合体位域,如下为isa_t的简写,bits是变量是什么意思一个位域。
union isa_t {
uintptr_t bits;
Class cls;
}
arm64架构下的bits架构师和程序员的差异
u架构intptr_t nonpointer :源码买卖网站源码 1; 是否对 isa 指针打开指针优化 0纯isa指针 1包含其源码编辑器他信息
uintptr_t has_assoc : 1; 相关政策标志位,0没有,1存在
uintpt源码编辑器r_t has_cxx_dtor : 1; 是否有 C++ 或许 Objc 的析构器,假源码网站如有析构函数,则需求做析构逻辑, 假如没有,则能够更快的开释政策
uintptr_t shiftcls : 33架构是什么意思; 存储类指针的值
uintptr_t magic : 6变量英文; 用于调试器判别其时政策是真的政策仍是没有初始化的空间
uintptr_t weakly_referenced : 1; 政策是否被指向或许从前指向一个 AR变量与函数C 的弱变量,没有弱引证的政策能够更快开释。
uintptr_t源码网站 unused : 1; 暂无运用
uintptr_t has_sidetable_rc : 1; 是否运用sidetable存储引证计数
uintptr_t extra_rc : 19 引证计数
在objc4的可调试源码中,运用isa拿出类的指针。
- 位移运算(x86架构,shiftclass占44位)
首要拿到p源码编辑器编程猫下载erson
的isa
,由于运用的源码调试,所以是x86架构(非M1),shiftclass占44位,又边3位,左边17位。想要只留下shiftclass则需求将isa
,先右移3位,再左移20位,再右移17。
- ISA_MASK 面具