在OC中内存管理MRC手动内存管理和ARC自动内存管理,ARC是从iOS 4.0开始,在iOS 4.0之前使用的都是MRC,内存需要靠程序员自己管理(如alloc一个对象在不使用的时候就要release),内存管理有以下准则:
只要对象还在使用,那么对象就不能释放;
如果你想使用该对象,就应该让该对象的引用计数+1;
当你不再使用该对象的时候就应将其释放,应用计数-1;
谁创建,谁管理,谁释放;
有加就有减,应用计数-1并不代表该对象释放,只有引用计数为0才表示该对象释放,retainCount=0之后再retain不能是对象复活;
iOS 4.0苹果推出了ARC之后,内存就不在需要程序员自己管理了,只要是强指针指向的对象都会被自动释放,所有继承NSObject的子类创建的对象默认都是强指针,除非使用__week修饰,__week修饰的对象是弱指针,不持有对象,所以不需要释放,ARC使用注意点:
不允许调用对象的release方法;
不允许调用对象的autorelease方法;
重写父类的dealloc方法时候不掉用【super dealloc】;
内存管理常出现的对象:
1、野指针:指针变量没有被初始化或者指向的空间已经被释放;
2、内存泄漏;
3、僵尸对象:在堆区已经被释放的对象(retainCount=0);
4、空指针:指针赋值为空(nil);
网友评论