首页>Program>source

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

最新回答
  • 2021-1-10
    1 #

    分配工具可跟踪对象的生命周期.如果您使用"分配"模板,则将其配置为记录 mallocfree 事件.您可能需要配置它以同时记录 retainreleaseautorelease 通过在分配工具设置中打开"记录参考计数"复选框来记录事件:

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

    Update for Xcode 9: 苹果使找到这些设置变得更加困难.现在您需要选择分配工具,然后从菜单栏中选择"文件">"记录选项"。

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

    如果要查看在停止运行之前已被重新分配的对象,则需要将"分配寿命"设置从"已创建并仍然存在"(默认)更改为"已创建所有对象":

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

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

    在对象的详细视图中,我可以看到 mallocfree 事件,由于我打开了"记录参考计数",因此我也可以看到 retainreleaseautorelease 消息及其对对象保留计数的影响.如果要查看任何这些事件的调用堆栈,可以打开窗口右侧的扩展详细信息面板:

  • sql server:多列的唯一约束
  • sockets:我是否需要心跳以保持TCP连接打开?