OC对象本质

本文主要对OC语言进行阅读和分析的笔记
说起OC那么接触到的第一个对象应该就是NSObject了,那么NSObject是怎么实现的呢?点进去头文件可以看到下面的代码

1
2
3
4
@interface NSObject {
Class isa;
}
@end

可以看到NSObject只有一个成员isa, 通过下面命令看到OC转成c++看看:

1
$ xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc <OC源文件> -o <输出的cpp文件>

翻开cpp文件可以看见NSObject对象转成了下面的代码”

1
2
3
struct NSObject_IMPL {
Class isa;
}

看来一个NSObject对象就是一个结构体,且里面也有一个成员isa,那么接下来看下isa是什么

1
typedef struct objc_class *Class;

可以看出isa的类型是一个结构体指针