【问题标题】:Instruments (allocation) and find which objects creates problems仪器(分配)并找出哪些对象会产生问题
【发布时间】:2012-11-16 14:42:13
【问题描述】:

我有内存问题(我正在使用 ARC),我确定我在应该是 weak 的某个地方创建了 strong @property。我运行仪器,它向我展示了这些分配:

这显然是一个不发布的问题。但是我可以在 Instruments 中找到它吗?

编辑:

蓝色的是我的,在点击了很多换屏之后。

【问题讨论】:

    标签: objective-c ios xcode instruments memory-leaks


    【解决方案1】:

    切换到分配工具中的调用树视图可以帮助您找到代码中分配发生的位置。使用跳转栏切换到调用树视图。

    当您切换到调用树视图时,您应该会在调用树的左侧看到一系列复选框。选择 Invert Call Tree 和 Hide System Libraries 复选框允许您在调用树中找到您的代码。

    您还可以使用检查范围按钮和图表的时间线来关注内存使用量增加的时间。点击时间线,点击左侧检查范围按钮,再次点击时间线,点击右侧检查范围按钮,设置检查范围。

    【讨论】:

    • 谢谢。现在我看到了一切。奇怪的是它只适用于模拟器,但对我来说没问题。
    【解决方案2】:

    我有内存问题(我正在使用 ARC),我确信我在应该很弱的地方创建了强大的 @property。

    仪器可以自动检测其中一些:

    • 点击左侧的“泄漏”轨道
    • 点击显示弹出窗口并选择“Cycles and Roots”(这是屏幕截图中标有“Statistics”的按钮)

    清空该列表(并删除所有/所有泄漏)后,然后使用Heapshot Analysis 对其进行攻击。这使您可以在一段时间内专注于未发布的增长。

    【讨论】:

    • 我没有泄漏(例如视图元素中的强属性)我只是存储了很多值 - 可能 iOS 认为这是可取的操作。我在我的问题中再添加两个屏幕。
    • @SimpleMan 强/循环引用被归类为泄漏,即使传统的内存扫描泄漏不报告它。这就是为什么将参考循环检测置于泄漏中的原因。我添加了一个向您介绍 Heapshot Analysis 的链接。
    猜你喜欢
    • 1970-01-01
    • 2014-03-07
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多