今天我们探究一下类的底层是什么实现的?
首先我们知道object_class 继承与objc_object,两者皆是底层代码
上代码
下面我们探究一下成员变量(基本数据类型)/属性/实例变量 的底层实现是什么样的?
通过指令clang -rewrite-objc main.m -o main.cpp 生成cpp文件
内存平移
接下来再看下面属性定义的区别
注意看上述结果 不同定义 是否有set方法字样
atomic, copy, mutableCopy等都用到reallySetProperty方法
其他扩展:
isa里面的存储的是 类的信息、是否在释放、引用计数、weak
对象isa和类不一样
类isa和元类一样
看下isKindOfClass的底层实现
tcls 为当前的根元类,根元类的父类为NSObject
上面的代码真的是走了isKindOfClass 吗?
现在设为为汇编模式,揭开真相
实际走的是objc_opt_isKindOfClass,哦豁,是不是掉坑里了......
网友评论