iOS底层探索 之 类的底层结构

123 阅读1分钟

今天我们探究一下类的底层是什么实现的?

首先我们知道object_class 继承与objc_object,两者皆是底层代码

上代码

image.png

image.png

下面我们探究一下成员变量(基本数据类型)/属性/实例变量 的底层实现是什么样的?

image.png 通过指令clang -rewrite-objc main.m -o main.cpp 生成cpp文件

image.png

image.png 内存平移

image.png

接下来再看下面属性定义的区别

image.png

image.png 注意看上述结果 不同定义 是否有set方法字样

image.png atomic, copy, mutableCopy等都用到reallySetProperty方法

image.png

其他扩展:

isa里面的存储的是 类的信息、是否在释放、引用计数、weak

对象isa和类不一样

类isa和元类一样

image.png

看下isKindOfClass的底层实现

image.png

tcls 为当前的根元类,根元类的父类为NSObject

上面的代码真的是走了isKindOfClass 吗?

现在设为为汇编模式,揭开真相

image.png 实际走的是objc_opt_isKindOfClass,哦豁,是不是掉坑里了......