OC 对象本质
我们平时编写的Objective-C代码,底层实现其实都是C\C++代码
对象基于 C 的 struct 来实现的
前端编译器是 clang
OC 转 C++
将Objective-C代码转换为C\C++代码xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc OC源文件 -o 输出的CPP文件
如果需要链接其他框架,使用-framework参数。比如-frameworkUIKit
OC 底层实现
NSObject的底层实现
OC 对象内存分配
结构体内存对齐: 结构体大小的必须是最大成员大小的倍数
操作系统分配内存时的内存对齐:是 16 的倍数,方便操作系统进行操作
malloc 源码规定对象最少也要分配 16字节
1 | |
OC 对象的分类

instance
isa指针
其他成员变量
class

isa指针
superclass指针
类的属性信息(@property)、类的对象方法信息(instance method)
类的协议信息(protocol)、类的成员变量信息(ivar)
……
meta-class
每个类在内存中有且只有一个meta-class对象
meta-class对象和class对象的内存结构是一样的,但是用途不一样,在内存中存储的信息主要包括
- isa指针
- superclass指针
- 类的类方法信息(classmethod)
- ……
objc_getClass(const char *aClassName)
object_getClass(id obj)
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!