Cos*_*min 56 xcode objective-c instruments ios
是否可以跟踪Objective-C对象的分配和释放?例如,如果我有一个类Book,我想跟踪Book类型对象的所有分配和解除分配.我可以跟踪所有默认的SKD类,例如UIViewController,UIWindow,UIView,NSDictionary等等,但我想跟踪从我定义的类创建的对象.
rob*_*off 216
您可以使用Allocations工具跟踪对象的生命周期.如果使用"分配"模板,则会将其配置为记录malloc
和free
事件.您可能需要配置它也记录retain
,release
以及autorelease
通过打开"记录引用计数"复选框,在分配仪器设置的事件:
(仪器正在录制时无法切换,只要您选择模板,它就会默认启动.)
Xcode 9的更新: Apple使查找这些设置变得更加困难.现在您需要选择分配工具,然后从菜单栏中选择文件>录制选项.
运行后,您可以使用"分配">"统计信息">"对象摘要"视图找到对象,这是"详细信息"窗格(窗口的下半部分)的默认设置:
如果要在停止运行之前查看已解除分配的对象,则需要将"已创建和静止"(默认)中的"分配寿命"设置更改为"创建的所有对象":
要查找特定类的对象,首先在窗口工具栏右端的"搜索"字段中键入类名.然后在列表视图的"类别"列中找到类名,将鼠标悬停在该列上,然后单击旁边显示的箭头.例如,我的应用程序有一个名为的类Tile
,所以我搜索它,然后单击Tile
列表视图旁边的箭头:
现在列表视图显示了每个实例Tile
.(请注意,您必须输入对象的实际类,而不是超类.输入NSObject
将只查找由其创建的[NSObject alloc]
对象,而不是由其创建的对象[Tile alloc]
.)我可以通过单击下一个箭头查看任何特定实例的历史记录.到该实例的地址:
在一个对象的详细视图,我可以看到malloc
和free
事件,并且由于我打开"记录的引用计数",我还可以看到retain
,release
和autorelease
信息及其对对象的保留计数的效果.如果我想查看任何这些事件的调用堆栈,我可以打开窗口右侧的扩展详细信息面板: