内存管理关心的是什么?
清理内存以便内存能够再次利用
Objective-C的基本内存管理模型分为三种:
- 自动垃圾收集
- 自动引用计数(ARC)
- 手动引用计数和自动释放池
1. 自动垃圾收集
特点:释放时间不确定性和释放顺序不确定性
2.手动管理内存
自动释放池:当到释放池结束时,对添加到释放池中的对象发送release消息,当对象引用计数为0时,系统调用derelease来释放内存。
关于
手动内存管理总结(共6点)
- 如果需要保持一个对象不被销毁,可以使用retain,在使用完对象后需要使用release进行释放;
- 使用release进行释放对象时,对象并不一定立刻被销毁,只有引用计数变为0时才有系统调用dealloc进行释放;
- 自动释放池结束时会向对发送autorelease的所有的对象发送release消息,如果池中某个对象引用计数变为0,则系统调用dealloc销毁该对象。
- 自动释放池结束时对池中对象发送release消息也不一定能够销毁所有的对象,因为某个对象引用计数可能还不为0;
- 当程序终止时所有的对象都被销毁;
- 对使用alloc retain copy方法的任何对象,以及具有retain和copy的属性的对象释放时,需要dealloc方法使得在对象释放的时候能够释放实例变量
强变量:所有对象指针变量都是强变量;
若变量:处理两者关系时使用,当一个若变量声明时,系统会追踪这个变量的饿引用,当引用对象释放时,若变量会被自动设置成nil,避免无意间给该变量发送消息引起系统崩溃。