1. 内存中的五大区域
-
内存分为5个区域,分别指的是----->栈区/堆区/BSS段/数据段/代码段
- 栈:存储局部变量,当其作用域执行完毕之后,就会被系统立即收回
- 堆:存储OC对象,手动申请的字节空间,需要调用free来释放
- BSS段:未初始化的全局变量和静态变量,一旦初始化就会从BSS段中回收掉,转存到数据段中
- 数据段:存储已经初始化的全局变量和静态变量,以及常量数据,直到结束程序时才会被立即收回
- 代码段:代码,直到结束程序时才会被立即收回
什么是类加载?
- 当某个类第一次被访问时,会被加载到代码段,这个过程叫类加载
- 执行方法的4步:
- 将方法加载到代码段
- 声明方法的参数到栈
- 把实参的值赋值给形参
一个对象在内存中的存储

- 对象中不存储方法,只存储属性
- 对象访问属性通过
2. 为什么有堆和栈?
- 移动设备的内存是有限的,每个App所占的内存都有一定限制,所以需要堆和栈来管理内存。
App占用手机内存的行为有:
- 创建一个OC对象
- 定义一个变量
- 调用一个函数或者方法
- 内存管理的范围和原因:
只有OC对象需要内存管理,基本数据类型不需要进行数据管理
- OC对象一般存储在堆里,由于堆内存是动态分配的,所以堆内存需要程序员手动回收;非OC对象存储在栈中,栈内存会被系统自动回收。
- 对于对象而言,栈内存用于存放对象的指针,堆内存用于存放对象
网友评论