由于移动设备的内存极其有限,所以每个APP所占的内存也是有限制的,当app所占用的内存较多时,系统就会发出内存警告,这时需要回收一些不需要再继续使用的内存空间,比如回收一些不再使用的对象和变量等。
引用计数机制:在ObjC中每个对象内部都有一个与之对应的整数(retainCount),叫“引用计数器”,当一个对象在创建之后它的引用计数器为1,当调用这个对象的alloc、retain、new、copy方法之后引用计数器自动在原来的基础上加1(ObjC中调用一个对象的方法就是给这个对象发送一个消息),当调用这个对象的release方法之后它的引用计数器减1,如果一个对象的引用计数器为0,则系统会自动调用这个对象的dealloc方法来销毁这个对象。
什么是自动引用技术?
自动引用计数:指内存管理中对引用采取自动计数的技术。苹果官方说明如下:在Objective-C中采取Automatic Refrence Counting(ARC)机制,让编译器来进行内存管理。“在LLVM编译器中设置ARC为有效状态,就无需再次键入retain或者release代码”换言之,满足以下条件无需手动输入retain和release代码了。
1.使用Xcode4.2以上版本;
2.使用LLVM编译器3.0或者以上版本;
3.编译器选项中设置ARC为有效。
满足以上条件,编译器将自动管理内存。
注?若需要在Xcode中关闭ARC:项目属性—Build Settings--搜索“garbage”找到Objective-C Automatic Reference Counting设置为No即可。
内存管理原则?
原则1
只要还有人在使用某个对象,那么这个对象就不会被回收;
只要你想使用这个对象,那么就应该让这个对象的引用计数器+1;
当你不想使用这个对象时,应该让对象的引用计数器-1;
原则2 谁创建,谁release
(1)如果你通过alloc,new,copy来创建了一个对象,那么你就必须调用release或者autorelease方法
(2)不是你创建的就不用你去负责
原则3 谁retain,谁release
只要你调用了retain,无论这个对象时如何生成的,你都要调用release
总结:有始有终,有加就应该有减。曾经让某个对象计数器加1,就应该让其在最后-1.