主页(http://www.175shouji.com):iOS 性能调优,成为一名合格iOS程序员必须掌握的技能
Color Hits Green and Misses Red(光栅化缓存图层的命中情况)
Core Animation
}
在 instruments 中,虽然选择了 Leaks 模板,但默认情况下也会添加 Allocations 模板.基本上凡是内存分析都会使用 Allocations 模板, 它可以监控内存分布情况。
第二种情况可以根据下图的操作清晰的找到对用的代码问题
view.addSubview(imageView)
navigationController?.pushViewController(svc, animated: true)
本文有些文字描述,来自于其他博客和文章,因为觉的描述挺好,若有不妥的地方,请告知我会立即删除修改
Allocations
@IBAction func brnAction(_ sender: AnyObject) {
print(i)
2). 对于imageView,通过CoreGraphics对绘画出来的image进行裁边处理,形成一个圆角的imageView,代码如下:
}
DispatchQueue.global().async {
view.layer.cornerRadius = 10
///
模拟器运行在Mac上,然而Mac上的cpu比ios设备要快很多,相反,Mac上的GPU和ios设备上的不一样,模拟器不得已需要在软件层面(CPU)模拟ios设备,所以GPU的相关操作在模拟器上面运行的会更慢
class SubView: UIView {
看下效果图:
draw(in: rect)
2). 设置opaque 属性为true
测量,而不是猜测
lineColor.setStroke()
}
这里会高亮那些被缩放或者拉伸以及没有正确对齐到像素边界的图片,即图片Size和imageView中的Size不匹配,会使图过程片缩放,而缩放会占用CPU,所以在写代码的时候保证图片的大小匹配好imageView,如下图所示:
view.addSubview(imageView)
图片尺寸 170 * 220px
let result = UIGraphicsGetImageFromCurrentImageContext()
这个选项会对任何直接使用OpenGL绘制的图层进行高亮,如果仅仅使用UIKit或者Core Animation的API,不会有任何效果
此选项会对重绘的内容进行高亮成黄色,也就是软件层面使用Core Graphics 绘制的图层。
}
右键就可以打开Xcode自动定位到相关占用内存方法的代码上
svc.title = "第二个页面"
GPU每一帧的绘制的像素有最大限制,这个情况下可以轻易绘制整个屏幕的像素,但如果发生重叠像素的关系需要不停的重绘同一区域的,掉帧和卡顿就有可能发生
self.layer.drawsAsynchronously = true
///
上面说的这些高亮图层,几个常用的选项在模拟器里面可以直接调试,非常方便
代码截图如下:
子view的代码如下:
1). 对于label类,可以通过CoreGraphics来画出一个圆角的label
这里会把那些需要离屏渲染的到图层高亮成黄色,而出发离屏渲染的可能有
看上图,可以很清楚看到此方法耗时比较严重,右键打开定位到此方法的代码:
个人觉的很像Windows的任务管理器,可以查看所有的进程,以及进程的内存、cpu使用百分比等数据等,就不多介绍了,打开一看大概就知道怎么回事
backColor.setFill()
@IBAction func btnAction(_ sender: AnyObject) {
bezier.lineWidth = 1