• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

iOS泄漏工具与事件监视器

[复制链接]
菜鸟教程小白 发表于 2022-12-12 10:55:20 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在调试由其他人编写的 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap