1.为什么要进行内存管理?管理的是什么?
内存管理,管理的是任何继承自NSObject的对象,因为一般的其他基本数据类型的局部变量都是储存在栈区的,当代码块执行结束,代码块中的局部变量出作用于就会被回收,而OC对象则不一样,OC对象类型是程序在运行过程中动态分配的,存储在堆区,其指针存在栈区,当出代码块后,作为局部变量的它其指针会被回收,但是堆区中的对象没有被释放,造成内存泄漏.
2.MRC
MRC,即Manual Reference Counting,在MRC下,我们根据对象的引用计数器来进行内存管理的.每个对象刚被创建的时候,默认的引用计数器为1,当引用计数器为0的时候,该对象就被销毁.我们可以把retain,alloc,new,copy看做是对引用计数+1操作,需要在适当的位置调用release或者autorelease使其-1保证没有内存泄漏. 内存管理的原则,谁创建,谁release;谁retain,谁release.
3.野指针和内存泄漏
谈到内存管理,不得不提到野指针和内存泄漏现象.野指针就是访问了僵尸对象,也就是访问了所占内存已经被回收的对象,这将直接导致程序崩溃.内存泄漏则是指不在使用的对象没有被回收,从而导致内存泄漏,程序闪退.
4.ARC
ARC,即Automatic Reference Counting,ARC是编译器特性,而不是运行时特征或者垃圾回收机制,ARC只是在编辑期间,为我们在合适的位置上插入release或者autorelease,我们自己不需要写retain,release和autorelease.
ARC下内存管理的判断标准就是对象有无强指针指向,只要没有强指针指向对象,该对象就会被释放.所有的指针默认都是强指针,强指针是用__strong修饰的,弱指针用__weak修饰,一般对于循环引用现象,将循环中一个对象设置为__weak就可以解决