一、为何进行内存管理app
提升手机流畅度函数
在程序开发中,应该及时将不用的数据回收,合理分配和管理内存,以提升程序的运行效率ui
规定运行起来的程序所占用的内存不得超过20m指针
一旦超过 就会发送警告 ,若是app接到警告尚未进行处理的话,程序会闪退对象
大部分闪退的缘由都是由于内存没有管理好继承
每一个界面占用内存累计增长内存占用量内存
二、哪些行为增长内存占用开发
1)建立对象get
2)定义变量内存管理
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
二、内存管理
一、野指针(僵尸对象):
僵尸对象:已经被销毁的对象
野指针:指向僵尸对象(不可用内存)的指针
空指针:没有指向存储空间的指针(里面村的是nil也就是-)
二、内存泄漏
若是在程序结束后,对象没有被释放,则成为内存泄漏