Instruments Allocations跟踪用户定义类的对象的alloc和dealloc

是否有可能跟踪我的Objective-C对象的分配和释放? 例如,如果我有一个Book类,我想跟踪Booktypes的所有对象的分配和释放。 我可以跟踪所有的默认SKD类,如UIViewController,UIWindow,UIView,NSDictionary和所有这些,但我也想跟踪从我定义的类创build的对象。

您可以使用“分配”工具来跟踪对象的生命周期。 如果使用“分配”模板,则将其configuration为loggingmallocfree事件。 您可能需要将其configuration为通过打开Allocations仪器设置中的“logging引用计数”checkbox来loggingretainreleaseautorelease事件:

记录引用计数复选框

(当乐器正在录制时,您不能切换此选项,只要您select了模板,就会默认启动。)

Xcode 9的更新:苹果让它更难find这些设置。 现在您需要selectAllocations乐器,然后从菜单栏selectFile> Recording Options。

运行后,可以使用“分配”>“统计”>“对象摘要”视图来查找对象,这是“详细信息”窗格(窗口下半部分)的默认设置:

对象摘要设置“详细信息”窗格

如果希望在停止运行之前查看已经释放的对象,则需要将Allocation Lifespan设置从“Created&Still Living”(默认值)更改为“All Objects Created”:

分配寿命设置

要查找特定类的对象,首先在窗口工具栏右端的search字段中input类名。 然后在列表视图的类别列中find类名称,将鼠标hover在列表视图上,然后单击其旁边的箭头。 例如,我的应用程序有一个名为Tile的类,所以我search了它,然后在列表视图中单击Tile旁边的箭头:

搜索

现在列表视图显示了Tile每个实例。 (注意,你必须input对象的实际类,而不是超类。进入NSObject只能find由[NSObject alloc]创build的对象,而不是由[Tile alloc]创build的对象。)我可以看到历史通过单击该实例地址旁边的箭头查看任何特定实例:

获取细节

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

扩展的调用堆栈的细节