Object-C的alloc和init 记录

159 阅读1分钟

常用的汇编指令 解释

  • b、bl 代表函数的跳转
  • ret 也就是return 返回
  • ; 分号代表注释
  • SEL 表示方法名
  1. alloc 开辟内存空间给对象, 内存在堆空间
  2. init 给对象的内存空间一个指针地址, 指针在栈空间 ,多个指针可以指向同一块内存空间

alloc的调用流程

alloc --> objc_rootalloc--> callalloc -->objc_msgSend--> alloc --> objc_rootAlloc -->callalloc -->objc_rootAllocWithZone -->_calss_createInstanceFromZone

为什么调两次callalloc?

init的调用流程

创建对象的过程

对象的本质是什么? 结构体指针

  1. NSObject 底层是 objc_Object 包含 isa指针和成员变量的值
  2. 创建对象的大小 = isa + 成员变量的大小 // cls ->instanceSize() 计算对象需要的内存大小 // calloc 系统给出的对象的大小

基本的数据类型占用的字节数

char 1 short 2 int 4 double 8

苹果分配内存规则

  1. NSObject 最少是8个字节(默认 isa变量)
  2. 苹果默认给对象分配16个字节,CPU读取快速,以空间换时间

编译器优化

1、未使用的代码,release 情况下会优化 2、通过缓存优化,提高编译速度

编译过一次后会缓存,等下次编译的时候直接返回缓存结果