首页 > 代码库 > 内存管理
内存管理
1、为什么进行内存管理
提高手机流畅度
在程序开发中,应该及时将不用的数据回收,合理分配和管理内存,以提高程序的运行效率
规定运行起来的程序所占用的内存不得超过20m
一旦超过 就会发送警告 ,如果app接到警告还没有进行处理的话,程序会闪退
大部分闪退的原因都是因为内存没有管理好
每个界面占用内存累计增加内存占用量
2、哪些行为增加内存占用
1)创建对象
2)定义变量
3)调用函数或者方法
堆区,栈区,常量区,代码区...
能够看到和控制的区域:堆区和栈区
3、OC内存管理的范围
管理任何继承自ONSObject的对象,对其它的基本数据类型无效
对象类型是程序运行过程中动态分配的,存储在堆区内存管理主要是 对堆区的对象的内存管理
一、内存管理的原理及分类
1、内存管理的原理
搞清楚两个概念:
1)对象的所有权
任何一个对象,都可能有一个或多个所有者
如:person *p=[Person new];
p就是对象的所有者
Person *p1=p
p1是p的所有者是对象的所有者
任何自己创建的对象都归自己所有
new/alloc/copy的方法创建对象,可以使用retain来获得一个对象的所有权
2)引用计数器
对象刚被创建时,默认计数值为1,当计数器的值变为0的时候,对象被销毁
(通过retainCount方法可以打印对象引用计数器的值)
MRC:手动内存管理
ARC:默认环境为ARC:automatic Reference count 自动引用计数器
怎么配置成MRC形式?
target->Build Setting automatic reference Counting (YES/NO)
a、引用计数器作用:
判断对象要不要被回收的依据
b、对引用计数器的操作
想要管理对象占用的内存,就要学会操作引用计数器
1)常见操作:
a、retain消息:计数器+1
b、release消息:计数器-1
原则:谁retain谁release
2、内存管理
1、野指针(僵尸对象):
僵尸对象:已经被销毁的对象
野指针:指向僵尸对象(不可用内存)的指针
空指针:没有指向存储空间的指针(里面村的是nil也就是-)
2、内存泄漏
如果在程序结束后,对象没有被释放,则成为内存泄漏
内存管理