在项目运行时有时候会出现卡顿感,例如tableView
滑动出现卡顿,这个时候就需要追踪卡顿的来源,这个时候就用到Instruments
中的Time Profiler
来进行性能优化。
-
先预编译项目(
command+i
),然后在弹出来的Instruments工具中选择Time Profiler
点击开始运行项目,为了测试这个性能我故意在cell里面添加了阻塞性能代码
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *cellID = @"cellID";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];
}
cell.textLabel.text = [NSString stringWithFormat:@"测试数据%ld",indexPath.row];
for (int i = 0; i < 1000; i++) {
[cell addSubview:[UILabel new]];
}
return cell;
}
-
然后在运行的项目中滑动
tableView
会发现出现严重的卡顿感 -
会发现
CPU
此刻处于暴增状态,接近占用100%,所以这个时候就需要找出造成CPU
消耗这么大的问题所以,在下面的面板中选中Call Tree
中的Separate by Thread
和Hide System Libraries
-
接下来在线程中找到问题代码,然后双击定位到代码的位置
注意
如果time profiler
中看不到方法名只能看到十六进制地址的解决办法
1、设置profiler
为debug
模式
首先打开Edit Scheme
设置
profiler
为
debug
2、设置Debug Information Format
中对应的Debug
下为DWARF with dSYM File
。和查看crash log
文件一样需要使用dSYM
文件来解析方法名称,没有这个的话只能显示十六进制的地址。