内存管理分两种模式
- 首先我们知道每一个oc对象都有一个内部的引用计数器(引用计数器的值是NSINteger类型),当有一个新的指针只想这个对象时,我们将引用计数加1 ,当某个指针不再指向该对象时,我们将其引用计数减1,当引用计数为0时,说明这个对象不再被任何指针指向了,这个时候我们就可以将对象销毁,回收内存。
- MRC模式
先说MRC(手动内存管理),当使用alloc,new,或者copy创建一个新对象时,新对象的引用计数默认就是1,当一个对象引用计数器值为0时,他将被销毁,其占用的内存会被系统回收,当一个对象被销毁时系统会自动向对象发送一条dealloc消息,一般会重写dealloc方法在这里释放相关资源,当对象被释放掉后,不可以重复释放,会出错,当引用计数器值为零时,那块储存空间就不可用了,是僵尸对象,如果再去进行释放,会出现野指针错误(只想了僵尸对象)(报错:EXC-BAD-ACCESS)。所以引用计数器值为0后要将指针清空防止出现野指针错误。 - ARC模式
ARC(注意ARC不是垃圾回收机制,是编译器特性,编译器会自动帮我们插入内存管理代码),ARC对象释放与否的判断标准:只要没有强指针指向对象,对象就会被释放,默认情况下所有指针都是强指针,ARC下对象被释放后会自动清空指针,不会出现野指针错误。