iOS泄漏工具与活动监视器

iOS泄漏工具与活动监视器,ios,memory-leaks,activity-monitor,Ios,Memory Leaks,Activity Monitor,我正在调试一个由其他人编写的iPhone应用程序,它不使用arc。我尝试过使用arc,但是他们有很多使用c风格的void指针的旧代码,所以当我这样做时,程序崩溃了 我已经放弃了那个想法,认为这是一个失败的事业。问题在于,分配/泄漏工具不会显示内存泄漏,但活动监视器会在用户每次滑动更改页面时显示内存泄漏。(每次刷卡大约1.5兆)不用说程序崩溃了 作为一个C++程序员,我有一些客观的C经验,我不理解内存在哪里的所有的进进出出。有人能给我一些关于如何追踪这个的建议吗 谢谢我强烈建议花一天时间深入阅读O

我正在调试一个由其他人编写的iPhone应用程序,它不使用arc。我尝试过使用arc,但是他们有很多使用c风格的void指针的旧代码,所以当我这样做时,程序崩溃了

我已经放弃了那个想法,认为这是一个失败的事业。问题在于,分配/泄漏工具不会显示内存泄漏,但活动监视器会在用户每次滑动更改页面时显示内存泄漏。(每次刷卡大约1.5兆)不用说程序崩溃了

<>作为一个C++程序员,我有一些客观的C经验,我不理解内存在哪里的所有的进进出出。有人能给我一些关于如何追踪这个的建议吗


谢谢

我强烈建议花一天时间深入阅读Objective-C编程指南(保留/发布/自动发布部分),直到它点击为止。还有几乎可以肯定在这里发挥作用的财产

具体地说,一些内存被一个或多个reserves、属性设置程序作为副作用保留,或者被一个视图保留在UI元素上(隐藏但不从其超级视图中删除)

在Instruments Allocations视图中,您可以看到未发布的对象类型-这将有助于跟踪它

另一个技巧是将日志语句放在dealloc方法中,以查看哪些大型对象没有被释放(控制台中没有日志语句)

你的最后一个选择是发布你的代码并在这里寻求帮助,或者雇佣某人帮你解决这个问题,或者将代码进行ARCify

编辑:我在周末有一个想法,关于如何跟踪任意对象,以获得它们是否被释放的指示,所以我创建了一个。使用
Tracker
类,您可以标记要跟踪的对象,当对象被解除分配时,您将在Xcode中看到一条日志消息。此外,还可以查询类对象以查看哪些对象仍然存在

它的工作原理是使用
objc\u setAssociatedObject()
将自身附加到被跟踪对象,然后在该对象被解除分配时记录自身(从而释放跟踪器对象)

因此,您可以在项目中尝试一些对象—视图、滚动视图、图像、数组等,看看是否至少可以找到未被解除分配的对象


希望这有帮助。

谢谢你的回复。我理解objective c处理内存的原理。ARC不是一个选项,因为重写所有不兼容的代码需要很长时间,因为我说过我已经尝试过这个选项。分配工具没有显示任何内存泄漏,这就是我提到“活动监视器显示”的原因这是分配没有显示的地方。我不能发布代码,因为我不完全确定哪些部分是问题所在,我确定您不想阅读代码页。我使用了dealloc技巧,但我认为问题在于UIImages没有释放。如果有其他想法,我将不胜感激。我已设法改用ARC。使用的内存较少,但我仍然有相同的问题。分配工具仅在活动监视器上显示问题。