常用的汇编指令 解释
- b、bl 代表函数的跳转
- ret 也就是return 返回
- ; 分号代表注释
- SEL 表示方法名
- alloc 开辟内存空间给对象, 内存在堆空间
- init 给对象的内存空间一个指针地址, 指针在栈空间 ,多个指针可以指向同一块内存空间
alloc的调用流程
alloc --> objc_rootalloc--> callalloc -->objc_msgSend--> alloc --> objc_rootAlloc -->callalloc -->objc_rootAllocWithZone -->_calss_createInstanceFromZone
为什么调两次callalloc?
init的调用流程
创建对象的过程
对象的本质是什么? 结构体指针
- NSObject 底层是 objc_Object 包含 isa指针和成员变量的值
- 创建对象的大小 = isa + 成员变量的大小 // cls ->instanceSize() 计算对象需要的内存大小 // calloc 系统给出的对象的大小
基本的数据类型占用的字节数
char 1 short 2 int 4 double 8
苹果分配内存规则
- NSObject 最少是8个字节(默认 isa变量)
- 苹果默认给对象分配16个字节,CPU读取快速,以空间换时间
编译器优化
1、未使用的代码,release 情况下会优化 2、通过缓存优化,提高编译速度
编译过一次后会缓存,等下次编译的时候直接返回缓存结果