2011-05-03 46 views
2

我是一名经验丰富的C/C++程序员,熟悉内存管理问题。过去我还发布了一些小型的iPhone应用程序。我试图检查我的最新应用程序的内存泄漏,我无法取得任何进展,因为有这么多。刚启动应用程序并查看第一个屏幕就会显示超过12,000个泄漏。修复iPhone内存泄漏,入门

我知道我可能忽略了各种各样的东西,但我在编写代码时非常谨慎。我试图释放我在dealloc方法中分配的所有内容。这就像我的应用程序委托永远不会被释放,因为我可以在应用程序委托的init方法中看到一些只能分配一次的东西。它们从不修改,并在dealloc方法中发布。

此应用程序围绕一个选项卡控制器构建,其中大约15个视图主要使用Interface Builder进行设置。

任何帮助,将不胜感激。

+0

您的应用程序委托不可能在您的应用程序的生命周期中获得发布,除非您明确地执行该操作。您通常希望它坚持到应用程序退出为止,而不需要调用dealloc。 – 2011-05-03 23:34:05

回答

5

苹果的工具是非常先进的..它可以告诉你最初创建内存泄漏的确切方法,我建议看看这些方法并仔细阅读你的代码,通常有这行代码在那里,你认为OMG我怎么会这么愚蠢。

如果这没有帮助,请尝试使用xcode进行“分析”,它很好地发现代码中的错误和泄漏,并将我的代码保存了几次。

+0

是的,我查看了堆栈跟踪和代码行。在这种情况下,我正在查看在应用程序委托的init方法中创建的对象。如果这很重要的话,它们也是属性。我试过使用这两个属性。 notation:'self.thing = [[[Thing alloc] init];'autorelease];以及传统的直接方式:'thing = [[Thing alloc] init];' – 2011-05-03 22:47:54

+0

如果你使用self.thing =你需要自动释放,因为对象将被再次保留,如果你直接做实例var =你不应该自动释放。我希望你不要忘记实现dealloc方法来释放你的实例变量? – 2011-05-03 23:09:31

+0

好的,我是个白痴。我在乐器中突出显示了“分配”,而不是“泄漏”。实际泄漏的数量是合理的。 – 2011-05-04 00:07:57