我释放分配或保留的对象多少次?
我正在制作一款iPhone游戏。我想释放已分配或保留的所有对象。在dealloc
函数中,我释放了所有这样的对象,但后来我意识到有时我最终会在尚未分配对象时释放对象。所以我想我需要检查其retainCount
是否大于零或不释放它之前。我释放分配或保留的对象多少次?
我的问题是:
难道我只是检查是否retainCount
大于零,然后再释放?
if([bg retainCount]!=0)
{
[bg release];
}
或
我应该释放它多次作为其retainCount
while([bg retainCount]!=0)
{
[bg release];
}
感谢您的帮助!
请勿使用-retainCount。
对象的绝对保留数是没有意义的。
您应该致电release
完全相同的次数导致对象被保留。没有更少(除非你喜欢泄漏),当然,没有更多(除非你喜欢崩溃)。
查看Memory Management Guidelines的全部细节。
你应该在某处纹身。 – 2010-09-16 21:11:44
@bbum:rdar:// 8122368(http://openradar.appspot.com/8122368对于我们所有的非苹果人) – 2010-09-16 21:20:07
我还没有使用retainCount到目前为止,但想知道如果我应该。感谢您的清除:) 当玩家在游戏中死亡时,我正在分配前景图像。现在,如果玩家完成关卡而不死于整个关卡,那么在dealloc中,我该如何检查是否应该释放前景。我只是用旗子来检查foregrounf是否被使用过? – abhinav 2010-09-16 21:31:02
Autorelease使retainCount变得毫无意义。无论您是否拥有物品,请跟踪保留&。研究&请记住这些规则:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html#//apple_ref/doc/uid/20000994-BAJHFBGH
任何对象的'retainCount'都是**您的业务**。它在那里作为一种调试手段,但仅此而已。生产代码永远不应该依赖它。 – Sven 2010-09-16 21:11:00
顺便说一句 - 不是它使代码正确 - 但根据定义,'retainCount'永远不会返回0,因为该对象已被释放的时间发生..... – bbum 2010-09-16 21:14:22
此外,请尝试使用“构建&分析“(即Clang分析器)。它可能会指出你出错的地方。 – 2010-09-17 00:18:14