特性优化就变成不可缺失的一些,质量优化就改成不可或缺的一些

Color Offscreen-Rendered Yellow(离屏渲染)

离屏渲染Off-Screen Rendering
指的是GPU在此时此刻屏幕缓冲区以外新开辟一个缓冲区进行渲染操作。还有其它一种显示器渲染格局-当前屏幕渲染On-Screen
Rendering ,指的是GPU的渲染操作是在当前用于显示的屏幕缓冲区中展开。
离屏渲染会先在屏幕外创建新缓冲区,离屏渲染截止后,再从离屏切到眼前显示屏,
把离屏的渲染结果突显到眼前屏幕上,这些上下文切换的历程是不行消耗质量的,实际费用中尽量幸免离屏渲染。
触发离屏渲染Offscreen rendering的作为:
(1)drawRect:方法
(2)layer.shadow
(3)layer.allowsGroupOpacity or layer.allowsEdgeAntialiasing
(4)layer.shouldRasterize
(5)layer.mask
(6)layer.masksToBounds && layer.cornerRadius
那里有要求小心的是第三条layer.shouldRasterize
,其实就是大家本文讲的第七个选项光栅化,光栅化会触发离屏渲染,因而光栅化慎用。
第六条设置圆角会触发离屏渲染,如果在某个页面大批量施用了圆角,会充足消耗品质造成FPS急剧下落,设置圆角触发离屏渲染要同时满意上面多少个规范:

layer.masksToBounds = YES;
layer.cornerRadius = 5;

下图是给一个label设置了圆角,触发离屏渲染:

离屏渲染效果图.jpg

为了尽可能防止触发离屏渲染,大家可以换此外手段来贯彻需求的功力:
(1)阴影绘制shadow:使用ShadowPath来代表shadowOffset等特性的安装
imageViewLayer.shadowPath = CGPathCreateWithRect(imageRect, NULL);
(2)利用GraphicsContex生成一张带圆角的图片或者view,那里不写现实落到实处进程,需求的可以度娘Copy,很多现成的代码。

Color Blended Layers (图层混合)

其一选项是检測哪儿发生了图层混合,先介绍一下怎么样是图层混合?至极多情形下,界面都是会现出八个UI控件叠加的情形,假诺有透明或者半晶莹剔透的控件。那么GPU会去统计这几个这么些layer终于的来得的水彩,也就是大家肉眼所示效果。比如一个上层Veiw颜色是藏蓝色RGB(0,255,0),下层又放了一个View颜色是黑色RGB(0,0,255),透明度是50%。那么到底展现到我们眼前的颜色是肉色RGB(0,127.5,127.5)。

这些总计进度会消耗一定的GPU资源消耗品质。如若大家把上层的藏蓝色View改为不透明,
那么GPU就不要花费资源计算,直接突显青色。

错落颜色总括公式:

R(C)=alpha*R(B)+(1-alpha)*R(A)    R(x)、G(x)、B(x)分别指颜色x的RGB分量

如果出现图层混合了。打开Color Blended
Layers选项,那块区域会浮现粉红色,所以大家调试的目的就是将革命区域消减的越少越好。

那就是说什么样下落棕色区域的产出吗?仅仅要安装控件不透明就足以。
(1)设置opaque 属性为true。

(2)给View设置一个不透明的颜色。没有新鲜必要设置白色就足以。
即使你在lldb中po打印某个控件,你会发觉打印出来的数量中。控件的opaque都是true。由于控件这几个特性的默许值都是true,所以率先种办法可以直接忽略掉。

应用第三种办法您会发觉以前绿色的都去掉掉了。
图片 1
安装不透明以前
图片 2
设置不透明之后

label.backgroundColor = [UIColor whiteColor];
label.layer.masksToBounds = YES;

到此处您恐怕想不到。设置label的背景象第一行不就够了么。为啥还有第二行?那是出于如若label的情节是华语。label实际渲染区域要大于label的size,最外层多了一个sublayer,如果不设置第二行label的边缘外层灰出现图层混合的庚午革命,因而必须在label内容是汉语的场馆下加第二句。单独使用label.layer.masksToBounds
= YES是不会生出离屏渲染,下文种讲离屏渲染。
注意点:UIImageView控件比較特殊。不仅须求自身那么些容器是不透明的,而且imageView包蕴的内容图片也务必是不透明的,如果你自己的图片现身了图层混合粉红色,先检查是否上下一心的代码有难题,借使确认代码没难题。就是图片自身的难点。可以联系你们的UI眉眉~

Color Non-Standard Surface Formats (不专业的表面颜色格式)

这几个调试选项没有一篇博文讲过,都是一向略过,我也尝尝很多途径去找这一个选项到底是怎么功能,可是苹果支付文档以及stackOverFlow都未曾对那几个具有解释。自己真机调试尝试了累累发觉有个规律,就是开拓那几个选项,某些Label和Button的背景颜色都会油不过生银白色,可是否必先现的,有些Label和Button依旧正常颜色背景。其他ImageView等控件是不会冒出银白色的背景颜色,估算是否和文本Text的安装有提到。若是你对这几个装有驾驭,欢迎商讨。

Color Non-Standard Surface Formats调试效果

预备工作

在性质优化中一个最具參考价值的特性是FPS:全称Frames Per
Second,事实上就是显示屏刷新率,苹果的iphone推荐的刷新率是60Hz,也就是说GPU每分钟刷新显示屏60次,那每刷新四遍就是一帧frame,FPS也就是每分钟刷新多少帧画面。精巧不变的页面FPS值是0,这几个值是不曾參考意义的。仅仅有当页面在运作动画或者滑动的时候。FPS值才有所參考价值。FPS值的大小反映了页面的流畅程度高低。当低于45的时候卡顿会比較显明。
注意点:
(1)使用真机调试。

(2)最好应用release包測试(release是公布版本号。苹果会在release包中做老大多优化办事,由此用release包測试出来的习性才是最忠实的)。
启航程序点击XCode选拔左上角-XCode->Open Developer Tool
->Instruments,打开Instruments再选取CoreAnimation:
图片 3
打开CoreAnimation
图片 4
CoreAnimation调试界面
图中1是FPS值。

图中2是例外纬度的调试选项(以下会挨个介绍)。

当App发展到自然的框框,品质优化就成为须要的少数。可是众多少人,又对品质优化很生疏,毕竟日常几乎年美国的首都在写作业逻辑,很少关切这么些。近年来在优化自己的档次,也采访了成百上千素材,那里先浅谈一下使用Instruments中CoreAnimation优化收获的经验以及计算,那是第一篇,后续会更新Timer
Profiler,Leaks等其余优化工具的求实用法。

Color Hits Green and Misses Red(光栅化)

这几个选项紧假如检測大家是是不是科学使用layer的shouldRasterize属性。shouldRasterize
= YES开启光栅化。

怎么是光栅化?光栅化是将一个layer预先渲染成位图(bitmap),再追加到缓存中,成功被缓存的layer会标注为青色,未能如愿缓存的会标明为黄色。正确行使光栅化可以获取肯定程度的性质进步。

适用情状:一般在图像内容不变的场地下才使用光栅化,比如设置阴影费用资源比較多的静态内容,假诺使用光栅化对质量的升官有肯定救助。
非适用境况:假诺内容会时时改变,那个时候绝不开启,否则会导致品质的荒废。比如大家在行使tableViewCell中,一般不要用光栅化,由于tableViewCell的绘图卓殊频仍。内容在不停的扭转。假诺使用了光栅化,会导致多量的离屏渲染下降质量。
借使你在一个界面中动用了光栅化,刚进去这些页面的所有应用了光栅化的控件layer都会是新民主主义革命。由于还没有缓存成功。假使上下滑动你会意识,layer变成了蓝色。

而是一旦你滑动幅度较大会发现,新面世的控件会是青色然后改成粉红色,由于刚開始这几个控件的layer还平素不缓存。
注意点:
(1)系统给光栅化缓存分配了一个稳住的轻重。因而不可能过度施用,假诺超出了缓存也会导致离屏渲染。
(2)缓存的小时为100ms。因而要是在100ms内并未使用缓存的靶子,则会从缓存中清除。
图片 5

Color Immediately(颜色刷新频率)

当执行颜色刷新的时候移除10ms的推移,因为可能在特定情景下你不须求那一个延迟,所以利用此选项加快颜色刷新的频率。不过貌似那一个调试选项大家是用不到的。

Color Offscreen-Rendered Yellow(离屏渲染)

离屏渲染Off-Screen Rendering
指的是GPU在眼前显示屏缓冲区以外新开辟一个缓冲区进行渲染操作。还有第三种荧屏渲染形式-当前荧屏渲染On-Screen
Rendering ,指的是GPU的渲染操作是在脚下用于展现的显示器缓冲区中开展。

离屏渲染会先在屏幕外创造新缓冲区,离屏渲染结束后。再从离屏切到当前显示器,
把离屏的渲染结果呈现到当下显示器上,这一个上下文切换的长河是非常消耗品质的。实际支付中尽量幸免离屏渲染。

触发离屏渲染Offscreen rendering的表现:
(1)drawRect:方法
(2)layer.shadow
(3)layer.allowsGroupOpacity or layer.allowsEdgeAntialiasing
(4)layer.shouldRasterize
(5)layer.mask
(6)layer.masksToBounds && layer.cornerRadius
那里有须求注意的是第三条layer.shouldRasterize
。事实上就是我们本文讲的第多个选项光栅化,光栅化会触发离屏渲染。因而光栅化慎用。

第六条设置圆角会触发离屏渲染。如若在某个页面大批量应用了圆角,会格外消耗质量造成FPS急剧下跌。设置圆角触发离屏渲染要平等时候知足以下八个标准化:

layer.masksToBounds = YES;
layer.cornerRadius = 5;

下图是给一个label设置了圆角,触发离屏渲染:
图片 6为了尽量防止触发离屏渲染。大家能够换其余手段来兑现要求的成效:
(1)阴影绘制shadow:使用ShadowPath来取代shadowOffset等属性的装置
imageViewLayer.shadowPath = CGPathCreateWithRect(imageRect, NULL);
(2)利用GraphicsContex生成一张带圆角的图样或者view,那里不写详细完毕进度,要求的能够度娘Copy,相当多现成的代码。

其一选项首假若检测大家是是还是不是正确行使layer的shouldRasterize属性,shouldRasterize

YES开启光栅化。什么是光栅化?光栅化是将一个layer预先渲染成位图(bitmap),再投入到缓存中,成功被缓存的layer会标注为黑色,没有得逞缓存的会标明为藏灰色,正确利用光栅化可以收获肯定水平的习性进步。
适用意况:一般在图像内容不变的场馆下才使用光栅化,例如设置阴影用度资源比较多的静态内容,即使应用光栅化对品质的升迁有一定扶助。
非适用景况:假如情节会时常转移,那些时候绝不开启,否则会导致品质的荒废。例如我们在行使tableViewCell中,一般不要用光栅化,因为tableViewCell的绘图卓殊频仍,内容在相连的浮动,假诺使用了光栅化,会导致大气的离屏渲染下跌质量。
设若您在一个界面中选拔了光栅化,刚进去那一个页面的有所应用了光栅化的控件layer都会是丁未革命,因为还不曾缓存成功,要是前后滑动你会意识,layer变成了蓝色。可是假如你滑动幅度较大会发现,新面世的控件会是黑色然后改成黑色,因为刚开头那一个控件的layer还尚无缓存。
注意点:
(1)系统给光栅化缓存分配了一个稳定的轻重,由此无法过度使用,若是过量了缓存也会招致离屏渲染。
(2)缓存的时日为100ms,因而一旦在100ms内尚未应用缓存的靶子,则会从缓存中革除。

Color Misaligned Images(图片大小)

本条选项可以扶助我们查阅图片大小是不是科学展现。假诺image size和imageView
size不匹配,image会出现黄色。要尽可能的下降藏黄色的面世,由于image
size与imageView size不兼容,会费用资源裁减图片。

下图中的image实际size(81,110)。顶部image正常,尾部image出现黄色由于位于了一个size
x 2的imageView容器中。
图片 7

Color Blended Layers (图层混合)

本条选项是检测哪个地方发生了图层混合,先介绍一下怎么样是图层混合?很多情况下,界面都是会油不过生多少个UI控件叠加的状态,如若有晶莹剔透或者半晶莹剔透的控件,那么GPU会去计算这几个这几个layer最后的显示的颜料,也就是咱们肉眼所见到的功效。例如一个上层Veiw颜色是青色RGB(0,255,0),下层又放了一个View颜色是革命RGB(0,0,255),透明度是50%,那么最后呈现到大家面前的水彩是黄色RGB(0,127.5,127.5)。那个统计过程会用度一定的GPU资源消耗质量。若是我们把上层的黑色View改为不透明,
那么GPU就不用用度资源总计,间接突显蓝色。混合颜色计算公式:

R(C)=alpha*R(B)+(1-alpha)*R(A)    R(x)、G(x)、B(x)分别指颜色x的RGB分量

假若出现图层混合了,打开Color Blended
Layers选项,那块区域会来得紫色,所以我们调试的目标就是将黑色区域消减的越少越好。那么怎么着减弱肉色区域的产出呢?只要设置控件不透明即可。
(1)设置opaque 属性为NO。
(2)给View设置一个不透明的颜料,没有异样需要安装白色即可。
一经您在lldb中po打印某个控件,你会发现打印出来的多寡中,控件的opaque都是NO,因为控件那几个特性的默许值都是NO,所以首先种艺术可以直接忽略掉。使用第三种格局您会意识此前藏黄色的都消除掉了。

设置不透明在此以前

安装不透明之后

label.backgroundColor = [UIColor whiteColor];
label.layer.masksToBounds = YES;

到此地您恐怕想不到,设置label的背景观第一行不就够了么,为啥还有第二行?那是因为如若label的情节是华语,label实际渲染区域要大于label的size,最外层多了一个sublayer,倘若不设置第二行label的边缘外层灰出现图层混合的黑色,由此须要在label内容是粤语的状态下加第二句。单独使用label.layer.masksToBounds
= YES是不会爆发离屏渲染,下文子禽讲离屏渲染。
注意点:UIImageView控件相比万分,不仅要求自我那些容器是不透明的,并且imageView包蕴的内容图片也亟须是不透明的,若是您自己的图样出现了图层混合黄色,先检查是否温馨的代码有难点,即使认同代码没难点,就是图片自身的标题,可以调换你们的UI眉眉~

Flash Updated Regions (重绘区域)

Colors regions on your iOS device in yellow when those regions are
updated by the graphics
processor.这几个选项会对重绘的内容高亮成粉黄色,重绘就是指使用Core
Graphics绘制,绘制会消耗一定的特性。因而重绘区域应该越小越好。

下图是用真机进入原生地图打开Flash Updated Regions
调试的功用图,分外惋惜截屏不可能截到色情的区域,因而我用红框圈起来,一共两处。坐上角的是在不停的基础代谢页面。右下角是在不停的基础代谢当前岗位,由此都是选择Core
Graphics重绘刷新的一种情景。而且你可以察觉色情区域非凡小,区域越小性能越好。
图片 8好了,花了几天的生机毕竟写完了~对Core
Animation的兼具调试选项也都表达了,借使你能在类型中客观利用。对App的习性提高肯定不可小看。当然那是本着试图的调剂形式,功效代码的布置性是或不是创制也是影响属性相当主要的一端。
自我才疏学浅。如有疏漏敬请评论指正,一块学习提升。若是你对认为对你有帮扶欢迎点个赞哈~谢谢。

iOS开发学习调换qq群: 529560119

Color Hits Green and Misses Red(光栅化)

Color Compositing 法斯特-Path Blue (高速路径)

Places a blue overlay over content that is detached from the
compositor.标记由硬件绘制的不二法门为红色,粉红色越多越好,能够对直接运用OpenGL绘制的图层进行高亮。没有对OpenGL有过多的钻研,所以那里不能给出demo。大家只是需要记住粉红色越多越好就ok。

Color Compositing 法斯特-Path Blue (快速路径)

Places a blue overlay over content that is detached from the
compositor.标记由硬件绘制的门路为粉色,灰色更多越好,可以对一贯利用OpenGL绘制的图层进行高亮。没有对OpenGL有过多的探究,所以那边无法给出demo,大家只要求记住紫色愈多越好就ok。

Color Non-Standard Surface Formats (不标准的外部颜色格式)

本条调试选项没有一篇博文讲过,都是直接略过,我也尝尝相当多途径去找这么些选项究竟是哪些效益,但是苹果支付文档以及stack
overflow都不曾对那些富有解释。自己真机调试尝试了丰富多发现有个规律,就是开拓那么些选项。某些Label和Button的背景颜色都会合世银白色。不过不是必先现的。有些Label和Button依然正常颜色背景。

其他ImageView等控件是不会合世银白色的背景颜色,算计是否和文本Text的设置有提到。假设你对这么些拥有明白。欢迎琢磨。
图片 9

未雨绸缪工作

在性质优化中一个最具参考价值的质量是FPS:全称Frames Per
Second,其实就是显示屏刷新率,苹果的iphone推荐的刷新率是60Hz,也就是说GPU每分钟刷新显示屏60次,那每刷新五遍就是一帧frame,FPS也就是每分钟刷新多少帧画面。静止不变的页面FPS值是0,这些值是从来不参考意义的,惟有当页面在执行动画或者滑动的时候,FPS值才具有参考价值,FPS值的分寸反映了页面的流畅程度轻重,当低于45的时候卡顿会相比较显著。
注意点:
(1)使用真机调试。
(2)最好应用release包测试(release是公布版本,苹果会在release包中做过多优化办事,因而用release包测试出来的属性才是最实在的)。

起步程序点击XCode选择左上角-XCode->Open Developer Tool
->Instruments,打开Instruments再采取CoreAnimation:

打开CoreAnimation

CoreAnimation调试界面

图中1是FPS值。
图中2是不相同纬度的调节选项(下边会挨个介绍)。

Color Copied Images(图片颜色格式)

Shows images that are copied by Core Animation in
blue苹果官方凝视被拷贝给CPU举办中转的图形突显为灰色。那么这句话怎么精晓呢?假若GPU不辅助当前图片的颜色格式。那么就会将图纸交给CPU预先举办格式转化,而且那张图片标记为粉色。

那么GPU支持什么格式呢?苹果的GPU仅仅解析32bit的颜料格式。假若使用Color
Copied Images去调节发现是灰色,这么些时候你也能够去找你们的UI眉眉了~
知识扩充:32bit指的是图片颜色深浅。用“位”来表示,用来表示展现颜色数量,比如一个图形协理256种颜色。那么就亟须256个不等的值来代表区其他水彩,也就是从0到255,二进制表示就是从00000000到11111111。一共须要8位二进制数。所以颜色深浅是8。

普普通通32bit色彩中拔取多个8bit分别表示R红G绿B蓝,另一个8bit平日应用来代表透明度(Alpha)。

Color Copied Images(图片颜色格式)

Shows images that are copied by Core Animation in
blue苹果官方注释被拷贝给CPU举行转向的图片体现为肉色。那么那句话怎么领悟呢?即使GPU不辅助当前图片的颜色格式,那么就会将图片交给CPU预先举行格式转化,并且那张图纸标记为黄色。那么GPU帮衬什么格式呢?苹果的GPU只分析32bit的水彩格式,假诺选择Color
Copied Images去调节发现是灰色,这几个时候你也得以去找你们的UI眉眉了~
知识扩张:32bit指的是图形颜色深浅,用“位”来代表,用来表示显示颜色数量,例如一个图纸扶助256种颜色,那么就要求256个差其余值来表示分裂的颜色,也就是从0到255,二进制表示就是从00000000到11111111,一共必要8位二进制数,所以颜色深浅是8。经常32bit情调中利用七个8bit分别表示R红G绿B蓝,还有一个8bit常用来代表透明度(Alpha)。

图片 10
简书地址:http://www.jianshu.com/users/6cb2622d5eac/latest_articles
当App发展到早晚的规模。品质优化就成为不可缺失的一点。不过分外五个人,又对品质优化分外陌生,毕竟平常大多年华府在写作业逻辑,非凡少关心这几个。近来在优化自己的花色。也采访了更加多材料,那里先浅谈一下使用Instruments中CoreAnimation优化收获的经历以及总计,那是率先篇,兴许会更新提姆er
Profiler,Leaks等其他优化工具的详实使用方法。

Flash Updated Regions (重绘区域)

Colors regions on your iOS device in yellow when those regions are
updated by the graphics
processor.这一个选项会对重绘的始末高亮成藏黑色,重绘就是指使用Core
Graphics绘制,绘制会开支一定的质量,由此重绘区域应该越小越好。下图是用真机进入原生地图打开Flash
Updated Regions
调试的意义图,很可惜截屏不可以截到色情的区域,因而我用红框圈起来,一共两处,坐上角的是在不停的基础代谢页面,右下角是在不停的刷新当前岗位,由此都是选取Core
Graphics重绘刷新的一种现象,并且你可以窥见色情区域很小,区域越小质量越好。

Flash Updated Regions开启地图效果图

好了,花了几天的活力毕竟写完了~对Core
Animation的全套调试选项也都教师了,即使您能在档次中客观使用,对App的性质进步一定不足小看。当然这是本着试图的调剂方式,功能代码的规划是不是成立也是影响属性很关键的另一方面。
自身才疏学浅,如有疏漏敬请评论指正,一块学习提升,假诺你对以为对您有帮衬欢迎点个赞哈~谢谢。iOS开发技术调换qq群:
529560119,提供种种新型权威学习书本及支付视频

Color Immediately(颜色刷新频率)

当运行颜色刷新的时候移除10ms的推移。由于可能在特定情景下您不须求那么些延迟,所以利用此选项加速颜色刷新的频率。只是一般这几个调试选项我们是用不到的。

Color Misaligned Images(图片大小)

本条选项可以帮忙大家查阅图片大小是或不是正确展现。即使image size和imageView
size不匹配,image会出现红色。要硬着头皮的缩短藏蓝色的出现,因为image
size与imageView
size不包容,会消耗资源减弱图片。下图中的image实际size(81,110),顶部image正常,尾部image出现藏灰色因为身处了一个size
x 2的imageView容器中。

Color Misaligned Images调试效果图

相关文章