gpt4 book ai didi

ios - Instruments Allocations 跟踪用户定义类的对象的分配和解除分配

转载 作者:IT老高 更新时间:2023-10-28 11:30:48 25 4
gpt4 key购买 nike

是否可以跟踪我的 Objective-C 对象的分配和解除分配?例如,如果我有一个 Book 类,我想跟踪 Book 类型对象的所有分配和释放。我可以跟踪所有默认的 SKD 类,例如 UIViewController、UIWindow、UIView、NSDictionary 等等,但我还想跟踪从我定义的类创建的对象。

最佳答案

您可以使用分配工具来跟踪对象的生命周期。如果您使用“Allocations”模板,它被配置为记录 mallocfree 事件。您可能希望将其配置为还记录 retainreleaseautorelease 事件,方法是打开分配中的“记录引用计数”复选框仪器设置:

record reference counts checkbox

(您无法在 Instruments 录制时切换此选项,默认情况下,它会在您选择模板后立即启动。)

Update for Xcode 9: Apple has made it more difficult to find these settings. Now you need to select the Allocations instrument, then from the menu bar choose File > Recording Options.

运行后,您可以使用 Allocations > Statistics > Object Summary View 找到您的对象,这是 Detail Pane (窗口下半部分)的默认设置:

Object Summary setting for Detail pane

如果您想查看在停止运行之前已被解除分配的对象,您需要将分配生命周期设置从“已创建且仍然存在”(默认)更改为“已创建的所有对象”:

Allocation Lifespan setting

要查找特定类的对象,首先在窗口工具栏右端的“搜索”字段中输入类名称。然后在 ListView 的 Category 列中找到类名,将鼠标悬停在它上面,然后单击它旁边出现的箭头。例如,我的应用程序有一个名为 Tile 的类,因此我搜索该类,然后单击 ListView 中 Tile 旁边的箭头:

Searching

现在 ListView 显示了 Tile 的每个实例。 (请注意,您必须输入对象的实际类,而不是父类(super class)。输入 NSObject 只会找到由 [NSObject alloc] 创建的对象,而不是由由 [Tile alloc] 创建。)我可以通过单击该实例地址旁边的箭头查看任何特定实例的历史记录:

Getting detail

在对象的详细 View 中,我可以看到 mallocfree 事件,并且由于我打开了“记录引用计数”,我还可以看到retainreleaseautorelease 消息及其对对象保留计数的影响。如果我想查看任何这些事件的调用堆栈,我可以打开窗口右侧的扩展详细信息面板:

extended detail of call stack

关于ios - Instruments Allocations 跟踪用户定义类的对象的分配和解除分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14890402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com