当前位置: 首页 > 科技观察

使用CocoaLayoutInstrument查看自动布局

时间:2023-03-16 18:22:45 科技观察

前段时间MarkD和我们讨论了Instruments中很多好用的诊断工具,比如TimeProfiler和EnergyDiagnostics模板。同样,这里我将提供一个Cocoa布局工具(CocoaLayoutInstrument)的概述。为了帮助探索,我在这里创建了一个简单的示例。这是一个iPhone应用程序,它使用AutoLayout来布置UICollectionView及其UICollectionViewCell内容。在此处下载带有跟踪输出的示例项目,让我们开始吧。CocoaLayoutInstrument可以与iOS模拟器和Cocoa桌面应用程序一起使用,但不能与连接的iOS设备一起使用。CocoaLayoutInstrument提供与NSLayoutConstraint类的实例相关的所有事件的时间线,很像回溯。Apple在与AnalysisTools相关的文档中描述了该工具。如何启动仪器?执行以下步骤打开CocoaLayoutInstrument1。打开示例项目2。选择产品>配置文件(快捷键)3。选择Cocoa布局模板4。将显示Instruments窗口并处于暂停状态,单击左上角的红色录制按钮()5。滑动图像并点击暂停按钮以结束事件的录制。在这篇文章的其余部分,我将使用我提供的回溯来进行说明和结果调整。如果你和我一样,请打开cocoa-layout-instrument.trace文件。我在这里能看到什么?如下图所示,时间线下方的一行中列出的一系列事件细节统称为NSLayoutConstraint对象的影响。所有影响事件都按时间顺序列出,最旧的事件列在顶部。每个事件包含以下信息:Caller:哪个类和方法触发了约束更改Constraint:这一列是跟踪的真实血肉。您可以判断哪个约束受约束的内存地址或标识符属性(如果可用)的影响。Constraint列还包含VFL字符串,描述了坐标轴对应的约束线与约束定义的关系。常量:定义约束的常量值。事件:详细说明某个约束加载了什么样的操作。这个约束可能被创建、移除或添加到窗口,或者标识符(identifier)等属性可能被修改或移除。这些变化事件包括:①创建②添加到窗口③常量修复④标识符改变⑤从窗口中移除过滤事件列表和时间线首先,过滤列表得到你感兴趣的内容。在右上角的文本框中标记记录的数据(RecordedData),键入0x7ff4e948dce0和0x7ff4e948d6e0。当然你的内存地址会不同,使用你在这里看到的地址。有趣的是,这个文本框只过滤VFL字符串和内存地址。现在列表就是我们想要的这些约束,让我们看一下列表的第一个事件,从第0行开始,(_:attribute:relatedBy:toItem:attribute:multiplier:constant:)方法创建了一个约束。在列表的约束行中,可以看到构成这个约束的关系(relationship)和属性(attributes),UILabel:0x7ff4e948dce0.leading==UIImageView:0x7ff4e948d6e0.leading。这意味着UILabel对象的顶边和UIImageView的顶边是相等的。在实现部分,一旦创建了约束,就设置了它的标识符属性。回溯中的输出记录是一个事件:identifier属性变为subtitleLeadingConstraint。除了按内存地址或约束值过滤外,您还可以关注事件的子集。单击并水平拖动时间线至顶部以指定事件的特定时间范围,如上图所示。与其他工具集类似,您会发现您可以拖动左侧的跟踪范围滑块来放大堆栈深度(StackDepth),从而在时间线上以更精细的时间尺度一窥事件。将回溯缩放滑块向右拖动以仔细查看其他控制轮和按钮,让我们看一下该工具提供的一些额外配置。为了改变事件在时间轴上的视觉表现,打开记录设置面板(),勾选StatisticstoGraph下的StackDepth选项:记录设置面板中时间轴的相关可选配置例如,改变时间轴的视觉风格:修改时间线样式对于给定事件,您还可以查看导致该事件的所有堆栈跟踪。首先,选择一个事件并打开ExtendedDetail面板(?-3)。在工具集窗口的右窗格部分,显示了该特定事件的堆栈跟踪。从表面看自动布局事件的堆栈跟踪Instruments的价值在于它们让我们深入了解代码的内部工作原理。CocoaLayoutInstrument将其扩展为自动布局,提供有关界面生命周期中每个步骤的丰富细节。