1

我几乎完成了和应用程序,我正在使用仪器来分析它。我在 ARC 释放某些东西时遇到问题,但我不知道是什么。我使用分配工具运行工具,我正在做的是在主视图启动应用程序,然后我标记一个堆,我与应用程序交互一点,然后返回到原始主视图并标记另一个堆。

我这样做了几次,据我了解,不应该有任何显着的堆增长,因为我回到了完全相同的地方,我在这之间所做的一切都应该被释放,没有提供堆增长。但是我有显着的增长,所以我深入研究堆,我发现它上面的几乎所有东西的保留计数都是 1,这让我相信一个对象或视图等由于我犯了一个错误而没有被释放而那个对象就是持有对其他一切的引用的东西。

我试图找出的是哪个对象没有被释放。Instruments 非常含糊,只提供模糊的指针,不允许我追溯问题。

请让我知道是否有办法让我跟踪持有可能将保留计数保持在 1 的引用的内容。

谢谢。

4

1 回答 1

0

我的第一个想法是两件事:
1)您可能有一个保留周期:例如,一个对象必须委托给一个强引用。并且委托还具有对第一个对象的强引用(而不是弱引用)。由于他们俩都“抓住”了另一个人,因此他们都无法释​​放。
2)您可能有一个多线程应用程序,其中一个线程没有分配自动释放池(即没有@autoreleasepool块),并且正在创建自动释放对象。即使在返回自动释放对象的简单 getter 方法中也可能发生这种情况。如果是这样,自动释放对象被“放入”到一个不存在的自动释放池中(它不会给你一个错误消息,因为你可以向 发送任何消息nil),并且它永远不会被释放。

于 2013-07-29T19:23:50.013 回答