首页 > 代码库 > 内存管理
内存管理
内存管理的管理范围
任何继承了NSObject的对象
对其他非对象类型无效(int、char、float、double、struct、enum等 )
只有OC对象才需要进行内存管理的本质原因:
OC对象存放于堆里面
非OC对象一般放在栈里面(栈内存会被系统自动回收)
系统是如何判断 什么时候需要回收一个对象所占用的内存?
根据对象的引用计数器
简单来说, 可以理解为: 引用计数器表示有多少人正在使用这个对象
当没有任何人使用这个对象时, 系统才会回收这个对象, 也就是说 当对象的引用计数器为0时, 对象占用的内存就会被系统回收
如果对象的计数器不为0,那么在整个程序运行过程,它占用的内存就不可能被回收(除非整个程序已经退出 )
所以我们以后就是通过操作引用计数器来管理内存
任何一个对象, 刚生下来的时候, 引用计数器都为1 当使用alloc、new或者copy创建一个对象时,对象的引用计数器默认就是1
retain +1,release-1,retainCount计数器值
dealloc: 当一个对象的引用计数器值为0时, 这个对象即将被销毁, 其占用的内存被系统回收 系统会自动给对象发送一条dealloc消息。 一般会对dealloc进行重写,但是重写一定要继承dealloc
多对象内存管理: 总的来说, 有这么几点管理规律
只要还有人在用某个对象,那么这个对象就不会被回收
只要你想用这个对象,就让对象的计数器+1
当你不再使用这个对象时,就让对象的计数器-1
内存管理原则 苹果官方规定的内存管理原则 谁创建谁release : 如果你通过alloc、new或[mutable]copy来创建一个对象,那么你必须调用release或autorelease
谁retain谁release :只要你调用了retain,就必须调用一次release
总结一下就是 有加就有减 曾经让对象的计数器+1,就必须在最后让对象计数器-1