我正在尝试在我的非ARC应用程序中增强内存分配。有一些对象,即使它们的引用计数为0,它们也被列为两个堆之间的持久对象。
这是我的堆图视图:

让我们以第一个heapshot (0x6deb180)中选择的LSBookChapter为例。这是该对象的历史记录:

为什么那个对象没有被释放?如果引用计数为0,我就不能确定何时过度保留该对象。
发布于 2012-06-13 18:41:53
在我之前的应用程序中,我和你现在一样有一些顾虑,因为我没有泄漏,但内存在不断增长。经过一番研究,我偶然发现了this。我确实试着在他的文章上做了一些捷径,但最后我只是阅读了整篇文章,以真正了解哪里出了问题。是的,我能够准确地指出我遇到的每个问题。我可以说我有相当多。
对于您的特定问题,我没有做您现在正在尝试的事情:在不同的堆中查看对象的retainCount。老实说,我认为这是浪费时间。我的主要目标是确保如果我做了某件事并逆转了它,内存不应该增加,或者如果它确实增加了,内存应该稍微增加(简单的例子:进入一个新的UIViewController,然后按回按钮)。
发布于 2012-06-14 00:28:48
你可以打开僵尸检测功能吗?
僵尸检测不会导致任何东西被释放,但是--很可能--保留计数将降为零,更有用的是,您将看到保留引起事件和释放引起事件之间的一对一对应关系。
此外,如果你不打开“只跟踪实时分配”,那么你会在对象释放后在Instruments中看到它,保留计数为0,但它确实被释放了。
https://stackoverflow.com/questions/11011420
复制相似问题