当引用计数设置为零时是否释放内存?

BaS*_*Sha 1 memory-management reference objective-c count

我发现将[object_name retain]对象引用计数增加1并将[object_name release]该对象引用计数减少1. [pool drain]对它引用的所有对象应用release.

现在我很困惑.当没有引用它时,对象会发生什么? release并且drain只是递减引用计数,所以内存实际上是在零引用计数上释放还是我仍然有一个零引用计数的对象?

我也发现了

[pool drain] //使我的Object str3引用计数为零

NSLog(@"%li",[str3 length]); //它有效,对象可能还没有被破坏!

//这里的其他代码

[pool drain]

//这里的其他代码

NSLog(@"%li",[str3 length]); //不工作,可能现在被销毁了!

Cat*_*Man 5

当没有强引用时(即释放时将其保留计数降低到0),对象将被释放.

但请记住,该-retainCount方法无用,您不应该调用它.

  • @AnoopVaidya:不,这根本不对.除了'nil`之外的任何对象都不会为其保留计数返回0.这是因为只有被破坏的对象才会有一个保留计数为0,但是向被破坏的对象发送消息是非法的.正如Catfish_Man所指出的那样,`retainCount`几乎没用.它当然无法告诉您对象是否已被解除分配. (2认同)