IOS--分析耗时操作

来源:互联网 发布:淘宝佣金插件 编辑:程序博客网 时间:2024/06/05 02:00

IOS–分析耗时操作

最近在工作中发现有写页面的tableView存在滑动卡顿的现象,虽然该页面的布局确实很复杂,但是卡顿的程度有的过分,学习到了instrument 另一个小玩意可以来分析我到底是哪里出了问题,在分析之前,tableview 的卡顿原因一般如下:

  • tableview 每行的行高 根据请求的数据 存储下来 不动态计算
  • 异步绘制界面
  • 少用或者不用透明视图 ,省去重新绘制视图的步骤 简单的从某层拷贝,节省了GPU相当大的工作量 opaque
  • 不动态添加view,在初始化时添加不使用时 hide即可

instrument简单介绍

instrument 最开始接触是分析内存泄漏的时候,那个时候浅尝辄止,只学习了Allocations 的一些相关的简单的操作,Allocations 可以给出你创建和存储的内存信息和具体的某个对象的计数,既然说到他了就简单介绍一下Allocation

Allocations

路径 xcode - > product - >profile
这里写图片描述

写到后边发现还是介绍一下剩下的比较常见的工具吧,除了Allocations 还有一个比较常见的
Leaks–用来寻找对象以及非对象的内存泄漏
Time Profiler 分析代码性能的,我用来看到底哪里比较耗时,可以来优化代码用 图中倒数第二个
Zombies – 最后一个 僵尸对象 寻找未充分保留,提前释放了的对象
其他的我也没有用到过,不过可以从名字中看出一些端倪

进入Allocations 可以看到

这里写图片描述

主要的有两个部分: Allocations 和 VM Tracker 分别是分配工具和追踪者.对于VM Tracker是虚拟机跟踪,(查找了很多额,只是说真重要有点复杂,什么显存之类的),粗浅的解释一下VM Tracker
VM Tracker 虚拟内存,首先解释下内存,如果我们没有用过instrument但我们一定偶尔看到过或者用到过

这里写图片描述
这里的Memory 指的是当前app占用的总内存,包含了堆栈内存, 虚拟内存的总和,而虚拟内存中 OpenGL占用的显存包含在虚拟内存中,除了这个一些malloc出来的内存也算在虚拟内存中 (0penGL 我没咋接触过,感觉就是个绘图的框架不过很牛逼的样子 3D 的以后应该会接触) 所以我就只简单的介绍一个大概,不常用到

简单介绍一下Allocations那一栏的作用
首先下边Details 里边选择CallTreen 选项中选择 忽略系统库 可以查看相关内存占用状态

Leaks

这个工具的使用频率是我认为最高的,如果有泄漏会变红,用鼠标选取泄漏的地方然后和Allocations 一样筛选非系统库然后一级级的找最后定位到系统泄漏的那个对象等
例如: 之前用到一个image 切图的一个方法 用到的一个CGImageRef,而CG开头的多是MRC 系统不管他的创建释放,然后就偶尔的崩溃了,其实应该在使用完之后对其 CGImageRelease(xxx),或者你不截取图片,而完整保留其他部分留白也是个方法 imageView.contentMode = UIViewContentModeScaleAspectFit;

Time Profiler

终于扯完犊子开始说正题了,我用了这个东西发现我cell 为啥滑动慢了,虽然我cell height 的高度再model 里边就以及计算好了,然后我cell 中对某些label 显示的text 做了截取和拼接,和计算宽度,这样子也比较浪费时间,每次刷新tableview 调用其tableview 代理方法,就会进行计算,然后把计算也放入了model里就很自然的解决了.这么来说吧就是在赋值的时候 把计算的结果复制给model的一个属性,从而做到缓存的效果…

到此为止,如果有问题有不对的地方希望指明,毕竟我只是小白一个~谢谢!

原创粉丝点击