OC中的内存管理

来源:互联网 发布:智多星软件教学视频 编辑:程序博客网 时间:2024/06/10 01:55

OC中的内存管理

内存管理:

软件运行时对计算机对计算机内存资源的分配和使用的技术,主要目的是高效快速的分配并且在适当的时候释放回收内存资源.

内存分区(五大区域)

栈区 -- 存放局部变量,临时变量

堆区 -- 程序运行过程中,动态分配的内存,由程序员来管理

BSS区 -- 未初始化的全局变量和静态变量

数据段 -- 已经初始化的全局变量和静态变量

代码段 -- 程序编译产生的二进制的数据


OC中内存管理的范围:

管理任何继承NSObject对象,对其他基本数据类型无效;

原因:OC对象存放于堆区,非OC对象一般存放在栈中(栈内存会被系统自动回收)


OC三种内存管理方式:

MRC: 手动管理机制(iOS4.1之前的版本项目)

ARC:  自动引用计数(iOS4.1之后推出的)

垃圾回收:  iOS不支持垃圾回收故不作说明;


MRC内存管理原则:

当某个对象还在被使用,那么这个对象就不会被回收;

当使用这个对象,那么就应该让这个对象的引用计数器+1;

当不需要使用这个对象时,应该让对象的引用计数器-1;

内存管理所研究的内容就是野指针和内存泄露问题;

关于MRC内存管理机制已经渐渐被抛弃,在这里也不作详细说明了,有兴趣的可以上网查阅一些关于MRC方面分析的文章吧.

ARC:

ARC机制下引入了自动释放池@autoreleasepool这个概念.比较简单,简单到不知道怎么说了

参考http://www.cnblogs.com/caishuhua226/archive/2012/12/23/2830331.html

ARC开发机制下就永远脱离了retain、release了;

原则:只要没有强指针指向对象,对象就会被自动释放;(在这里需要了解强弱指针的基本知识)


0 0