dealloc和release的关系

来源:互联网 发布:拼音读法软件 编辑:程序博客网 时间:2024/06/11 03:29

本文请结合本博客中的《剖析dealloc》进行阅读;

    在介绍release之前,先引入“引用计数"的概念,引用计数和内存是密切相关的,这一概念的提出就是针对内存提出的,即:我这一块内存有几个人在用;

    引用计数的使用原则:

    a 当使用到alloc,new和copy登关键字时(初始化),引用计数一定为1;

    b当对象被retain之后,引用计数加1;

    c当对象被release之后,引用计数减1;

通过下面的程序来更好地理解引用计数这个概念

   NSString * str=[[NSString alloc]init];//初始化,由于用到了alloc,所以指针str指向的内存的引用计数一定为1;

  [str retain];//通过引用计数的引用规则可以知道,引用计数加1,此时引用计数为2;

  [str release];//根据原则引用计数减1,此时引用计数为1;

如果我们想要查看对象的内存的引用计数,就能通过retaincount这个属性进行查看;

即:

  nslog(@"str:%d",str.retaincount);

或者

  nslog(@"str:%d",[str retaincount ]);


而当系统引用计数为0之后,系统会自动调用dealloc方法,注意!是自动调用,而不是手动,为什么不能手动,可参见本博客《剖析dealloc》一文


综上所述:dealloc是否调用完全取决于内存的引用计数,当内存的引用计数为0时,才会调用dealloc方法,而降低引用计数,正是通过release实现的;