浅谈OC内存管理

MRC(手动管理内存):

1、如果使用了alloc、new、copy、retain必须使用release、autorelease来释放这个内存

2、alloc产生一个新对象,把新对象的引用计数器设置为1,retain保留对象,使对象的引用计数器+1,release使对象的引用计数器-1

3、当对象的引用计数器变成0,就会调用dealloc函数,对象释放内存

4、对象创建的时候计数器=1,retain,计数器+1,release,计数器-1,加入数组计数器+1,数组删除对象引用计数器-1

5、property中的三个关键字assign、retain、copy、strong、weak修饰的变量的setter写法

   assign:-(void)setCar:(Car*)car   {

            _car = car;
            }

  retain:-(void)setCar:(Car*)car{

            if(_car != car){

               [_car release];

              _car = [car  retain];

            }

          }     copy只是将retain改成copy,被定义有copy属性的自定义对象必须要符合NSCopying协议,并实现必须实现的方法,对于不可变对象而言,copy使引用计数器+1,对于可变对象而言,copy不对原引用计数器的值改变,生成一个新的对象,引用计数器=1

  strong:相当于retain,weak相当于assign  当一个对象不再有strong类型的指针指向它的时候 它会被释放  ,即使还有weak型指针指向它。不过strong、weak只能修饰对象。

 

ARC使用机制:不能调用dealloc,不能重写和调用retain,release,retainCount 和autorelease,同理,@selector(retain),@selector(release)这些曲线救国的方法也不能调用。 dealloc虽然能够重写,但是不能调用[super dealloc]之类的方法

   

如有错误,烦请指正! 

posted @ 2016-04-26 17:12  小妮子的奋斗时代  阅读(144)  评论(0编辑  收藏  举报