iOS的内存5大区

1. 内存中的五大区域

  • 内存分为5个区域,分别指的是----->栈区/堆区/BSS段/数据段/代码段
  1. 栈:存储局部变量,当其作用域执行完毕之后,就会被系统立即收回
  2. 堆:存储OC对象,手动申请的字节空间,需要调用free来释放
  3. BSS段:未初始化的全局变量和静态变量,一旦初始化就会从BSS段中回收掉,转存到数据段中
  4. 数据段:存储已经初始化的全局变量和静态变量,以及常量数据,直到结束程序时才会被立即收回
  5. 代码段:代码,直到结束程序时才会被立即收回

什么是类加载?

  • 当某个类第一次被访问时,会被加载到代码段,这个过程叫类加载
  • 执行方法的4步:
    1. 将方法加载到代码段
    2. 声明方法的参数到栈
    3. 把实参的值赋值给形参

一个对象在内存中的存储

一个对象在内存中的存储
  • 对象中不存储方法,只存储属性
  • 对象访问属性通过

2. 为什么有堆和栈?

  • 移动设备的内存是有限的,每个App所占的内存都有一定限制,所以需要堆和栈来管理内存。

App占用手机内存的行为有:

  1. 创建一个OC对象
  2. 定义一个变量
  3. 调用一个函数或者方法
  4. 内存管理的范围和原因:

只有OC对象需要内存管理,基本数据类型不需要进行数据管理

  • OC对象一般存储在堆里,由于堆内存是动态分配的,所以堆内存需要程序员手动回收;非OC对象存储在栈中,栈内存会被系统自动回收。
  • 对于对象而言,栈内存用于存放对象的指针,堆内存用于存放对象
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。