dealloc和release的关系

本文请结合本博客中的《剖析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实现的;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值