【总结】 - OC内存管理(1)

来源:互联网 发布:医疗器械注册软件研究 编辑:程序博客网 时间:2024/05/20 19:45

由于没有垃圾回收机制,内存管理对OC来说一直是一个比较重要的内容。通过这篇文章,对内存管理相关知识做一个总结,弄清程序的内存原理,进而更深刻的认识OC程序。

内存区域探索

内存分为五大区块,分别是:
1. 栈区(存放局部变量,代码块结束后自动释放)
2. 堆区(存放对象,有程序员手动操控释放)
3. 全局区(存放全局变量,程序结束后自动释放)
4. 文字常量区(存放常量字符串,程序结束后自动释放)
5. 程序代码区(存放函数体的二进制代码)

我们研究的重点在于堆区,这个区的内存特点我把它归纳为八个大字:

生不带来,死不带去


对象的消亡

一个人,只有被所有人都遗忘的时候,他才真正死去 ——阿不思·邓布利多1

一个对象也是这样。
* 对象被创建(alloc)的时候,计数器默认计数为1
* 被调用2一次,计数器+1(retain方法)
* 被遗忘3一次,计数器-1(release方法)
* 直到计数器为0,对象真正死去——从内存中删除,成为一个僵尸对象

这时,如果原指针试图继续操纵该对象,就会发生野指针错误

# 小结从上述内容中我们发现,在新建对象、调用对象时,我们需要对对象的计数器进行retain操作在需要对象释放的时候,需要对对象进行release操作

下篇将会详细描述内存操作的场景
OC内存管理(2)


  1. 阿不思·邓布利多:霍格沃茨魔法学校校长,被公认为是当代最伟大的巫师。邓布利多是一级梅林勋章获得者、凤凰社创始人和保密人、国际魔法师联合会主席、威森加摩首席魔法师。 ↩
  2. 分为对象被创建、对象被别人调用 ↩
  3. 分为主动遗忘(调用者用新对象替换原对象)、被动遗忘(调用者死亡dealloc方法) ↩
0 0
原创粉丝点击