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

Cos*_*min 56 xcode objective-c instruments ios

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

rob*_*off 216

您可以使用Allocations工具跟踪对象的生命周期.如果使用"分配"模板,则会将其配置为记录mallocfree事件.您可能需要配置它也记录retain,release以及autorelease通过打开"记录引用计数"复选框,在分配仪器设置的事件:

记录参考计数复选框

(仪器正在录制时无法切换,只要您选择模板,它就会默认启动.)

Xcode 9的更新: Apple使查找这些设置变得更加困难.现在您需要选择分配工具,然后从菜单栏中选择文件>录制选项.

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

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

如果要在停止运行之前查看已解除分配的对象,则需要将"已创建和静止"(默认)中的"分配寿命"设置更改为"创建的所有对象":

分配寿命设置

要查找特定类的对象,首先在窗口工具栏右端的"搜索"字段中键入类名.然后在列表视图的"类别"列中找到类名,将鼠标悬停在该列上,然后单击旁边显示的箭头.例如,我的应用程序有一个名为的类Tile,所以我搜索它,然后单击Tile列表视图旁边的箭头:

搜索

现在列表视图显示了每个实例Tile.(请注意,您必须输入对象的实际类,而不是超类.输入NSObject将只查找由其创建的[NSObject alloc]对象,而不是由其创建的对象[Tile alloc].)我可以通过单击下一个箭头查看任何特定实例的历史记录.到该实例的地址:

获取细节

在一个对象的详细视图,我可以看到mallocfree事件,并且由于我打开"记录的引用计数",我还可以看到retain,releaseautorelease信息及其对对象的保留计数的效果.如果我想查看任何这些事件的调用堆栈,我可以打开窗口右侧的扩展详细信息面板:

调用堆栈的扩展细节

  • 我使用ScreenFlow记录屏幕并编辑每个视频的长度和大小.然后我使用Photoshop将每个视频转换为动画GIF. (8认同)
  • @robmayoff fabulas的工作,像你这样的人正在帮助ios社区学习越来越多. (2认同)
  • @gyurisc有一种更简单的方法来创建GIF动画:[LICEcap](http://www.cockos.com/licecap/).它将您的屏幕直接录制到动画gif上. (2认同)