Xcode高级版本中引入的ARC机制帮助我们摆脱了枯燥的内存管理,其本质是编译器在编译代码时自动帮我们把内存管理的代码加在了代码中,当然ARC可以在Xcode中关闭,在项目中的Build Settings中Objective-C Automatic Refrence Counting设置为NO即可。ARC全程为Automaic Rerence Counting,顾名思义,自动引用计数。
在oc中每个对象都默认拥有一个引用计数器,统计当前有多少个指针指向该对象,当引用计数器为0时,系统则回收该对象所占用内存空间。
针对引用计数器有如下对象方法:
1.retain:计数器+1,返回对象本身;
2.release:计数器-1,没有返回值;
3.retainCount:获取当前对象的引用计数器值
当对象被回收时,必然调用对象的dealloc方法,该方法可重写,但重写时必须在最后加上[super dealloc]调用父类的dealloc方法,使父类回收其需要回收的资源。
内存管理中有几个比较重要的概念:
1.僵尸对象:指所占用内存已经被回收的对象,该对象将不能被继续使用;
2.野指针:指向僵尸对象的指针称为野指针,使用野指针发送selector,即调用方法时会报EXC_BAD_ACCESS运行时错误;
3.空指针:与c#,java等语言类似,空指针指指针的值为空,不指向任何有效内存,值为nil, NULL,0,给空指针发送selector,即调用方法时不会报错,但没有任何效果。
内存管理中的几个原则:
1.需要使用对象,就需要使对象的引用计数器+1,即调用对象的retain方法;
2.不在使用对象,就需要使对象的引用计数器-1,即调用滴香的release方法;
3.谁retain,谁release;
4.谁alloc(new、copy),谁release。