•所谓内存管理, 就是对内存进行管理, 涉及的操作有:
分配内存 : 比如创建一个对象, 会增加内存占用
清除内存 : 比如销毁一个对象, 能减小内存占用
•内存管理的管理范围
任何继承了NSObject的对象
对其他非对象类型无效(int、char、float、double、struct、enum等 )
•只有OC对象才需要进行内存管理的本质原因
OC对象存放于堆里面
非OC对象一般放在栈里面(栈内存会被系统自动回收)
•系统是如何判断 什么时候需要回收一个对象所占用的内存?
根据对象的引用计数器
•什么是引用计数器
每个OC对象都有自己的引用计数器
它是一个整数
从字面上, 可以理解为”对象被引用的次数”
也可以理解为: 它表示有多少人正在用这个对象
•要想管理对象占用的内存, 就得学会操作对象的引用计数器
•引用计数器的常见操作
给对象发送一条retain消息, 可以使引用计数器值+1(retain方法返回对象本身)
给对象发送一条release消息, 可以使引用计数器值-1
给对象发送retainCount消息, 可以获得当前的引用计数器值
•苹果官方规定的内存管理原则
谁创建谁release : 如果你通过alloc、new或[mutable]copy来创建一个对象,那么你必须调用release或autorelease
谁retain谁release :只要你调用了retain,就必须调用一次release
•总结一下就是
有加就有减
曾经让对象的计数器+1,就必须在最后让对象计数器-1
•autorelease方法的基本作用
给对象发送一条autorelease消息, 会将对象放到一个自动释放池中
当自动释放池被销毁时,会对池子里面的所有对象做一次release操作
会返回对象本身
调用完autorelease方法后,对象的计数器不变