OGeek|极客世界-中国程序员成长平台

标题: iOS泄漏工具与事件监视器 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 10:55
标题: iOS泄漏工具与事件监视器

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

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

我本人是一名 c++ 程序员,有一些客观的 c 经验,我不了解内存被占用的所有细节。谁能给我一些关于如何追踪这个的指示。

谢谢



Best Answer-推荐答案


我强烈建议您花一天时间深入阅读 Objective-C 编程指南(保留/释放/自动释放部分),直到点击为止。还有几乎可以肯定的属性。

具体来说,一些内存已被保留过多的保留,作为副作用的属性 setter 或持有 UI 元素的 View (被隐藏但未从其 super View 中删除)。

在 Instruments Allocations View 中,您可以看到未释放的对象类型 - 这应该有助于追踪它。

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

您的最后一个选择是在此处发布您的代码并寻求帮助,或者聘请某人帮助您解决此问题或对代码进行 ARCify。

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

它通过使用 objc_setAssociatedObject() 将自身附加到被跟踪对象,然后在该对象被释放时记录自身(从而释放跟踪对象。

因此,您可以在您的项目中尝试一些对象 - View 、 ScrollView 、图像、数组等,看看您是否至少可以找到在应该被释放时没有被释放的对象。

希望这会有所帮助。

关于iOS泄漏工具与事件监视器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16479541/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4