常用技术收集

Instrument 中Time Profiler、Alloca

2016-12-31  本文已影响115人  ZhangCc_

Instrument

Time Profile(分析代码的执行时间,找出导致程序变慢的原因)

按线程分开做分析,这样更容易揪出那些吃资源的问题线程。特别是对于主线程,它要处理和渲染所有的接口数据,一旦受到阻塞,程序必然卡顿或停止响应。

反向输出调用树。把调用层级最深的方法显示在最上面,更容易找到最耗时的操作。

隐藏系统库文件。过滤掉各种系统调用,只显示自己的代码调用。

拼合递归。将同一递归函数产生的多条堆栈(因为递归函数会调用自己)合并为一条。

找到最耗时的函数或方法。

Allocations(内存分配)

通常是一个 Core Foundation 对象,OC类、或原始内存块(block)。

当前已经分配内存但是仍然没有被释放的字节的总数。

当前已经分配内存但仍然没有被释放的对象或内存块的数量。

当前已经分配内存但仍然没有被释放的对象或内存块的数量。

所有已经分配内存,而且包括已经被释放了的字节的总数。

所有当前已经分配内存,包括已经被释放了的对象或内存 块的总数。

当前和全部分配数的直方图。如上图所示当比例变化时,直方条会变颜色,Instruments 应用通常给它们标示不同的颜色来指出分配模式以便进行进一步的研 究。

Leaks检查内存泄露

监测读取、缓存未命中、保存等操作,能直观显示是否保存次数远超实际需要。

观察约束变化,找出布局代码的问题所在。 Network:跟踪 TCP / IP 和 UDP / IP 连接。

创建和编辑测试脚本来自动化 iOS 应用的用户界面测试。

Core Animation(必须使用真机)

解决方法:
1、backgroundColor属性(最重要),如果不设置这个属性,控件依然被认为是透明的
2、opaque设置为YES,作用不是很大;但如果设置NO,影响却很大
3、关闭alpha通道

注意:对于文字,iOS8上用UILabel显示中文却出现了像素混合的情况,因为在iOS8以前,UILabel使用的是CALayer作为底图层,而在iOS8开始,UILabel的底图层变成了_UILabelLayer,绘制文本也有所改变。

解决方法:背景色的四周多了一圈透明的边,而这一圈透明的边明显超出了图层的矩形区域

设置图层的masksToBounds为YES时,图层将会沿着Bounds进行裁剪,就可以了

总结:

优化滑动性能主要涉及三个方面:

1、避免图层混合

2、避免临时转换

3、慎用离屏渲染

上一篇 下一篇

猜你喜欢

热点阅读