检查dealloc方法中的保留计数

时间:2013-03-04 08:00:10

标签: ios dealloc retaincount

最近我遇到了一个问题,我从屏幕A导航到屏幕B.当我从屏幕B回到屏幕A时,应用程序中的Live Bytes没有返回到初始值。经过进一步调查后,我发现我在一些被称为不止一次的方法中保留了一些全局对象。所以我不得不修复方法的调用机制。

我解决了这个问题,但我正在考虑一个替代解决方案。如果我只是在dealloc中使用for循环,它会根据retain count的值运行。我认为不建议使用这种方法,但如果我确信不能从文件外的任何地方访问对象,那么这种方法的确切问题是什么。

提前致谢。

2 个答案:

答案 0 :(得分:4)

  

如果我只是在dealloc中使用了一个for循环,该循环根据retain count的值运行。

如果Xcode检测到这样的代码并且用几安培激活MacBook Pro的铝制外壳,我不会感到惊讶。

  

我认为使用这种方法是不可取的,但是什么是   如果我确定对象不是这种方法的确切问题   从文件外的任何地方访问。

你是对的 - 不可取。至少有两个问题:

  1. 它彻底打破了Objective-C的内存管理范例。你真的不能确定没有其他对象保留你的一个对象。举个例子:您在-dealloc方法中不知道您的ivars引用的任何对象是否已被自动释放。

  2. 这是错误的解决方法。做你的建议不会修复你的代码中的错误,它只会掩盖它们。您的对象应该正确管理他们使用的对象,而不必担心其他对象可能保留或不保留。如果您遵循这个简单的公式,您不必担心是否从“文件外”访问对象 - 一切正常。

  3. 你不仅不应该使用-retainCount来保留低至0 you shouldn't look at -retainCount at all的保留数量。

答案 1 :(得分:1)

保留计数不适合你依靠。有些内部实现可以在不知情的情况下增加/减少保留计数,因此不建议使用它。

您应该使用xcode工具查找内存泄漏,这将导致您在代码中保留和不释放对象的位置。

或者您可以启用ARC并让它为您管理内存。