ca88亚洲城网站不久前在优化自己的品类,又对性能优化非凡陌生

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调试效果图

ca88亚洲城网站 1
简书地址:http://www.jianshu.com/users/6cb2622d5eac/latest_articles
当App发展到早晚的范围。性能优化就改成不可缺失的某些。可是特别五人,又对性能优化相当陌生,毕竟平常大多时辰都在写作业逻辑,分外少关注这么些。如今在优化自己的系列。也收集了那么些多材料,这里先浅谈一下利用Instruments中CoreAnimation优化收获的经历以及总括,这是首先篇,兴许会更新提姆er
Profiler,Leaks等此外优化工具的详实使用模式。

启航程序点击XCode拔取左上角-XCode->Open Developer Tool
->Instruments,打开Instruments再采取CoreAnimation:

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 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)。

(1)设置opaque 属性为true。

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 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设置了圆角,触发离屏渲染:
ca88亚洲城网站 2为了尽可能防止触发离屏渲染。我们可以换另外手段来贯彻必要的效应:
(1)阴影绘制shadow:使用ShadowPath来代表shadowOffset等属性的设置
imageViewLayer.shadowPath = CGPathCreateWithRect(imageRect, NULL);
(2)利用GraphicsContex生成一张带圆角的图片或者view,这里不写详细实现过程,须要的可以度娘Copy,相当多现成的代码。

ca88亚洲城网站 3

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

这个调试选项没有一篇博文讲过,都是直接略过,我也尝尝很多路子去找这个选项到底是何许效能,不过苹果支付文档以及stackOverFlow都尚未对这些装有解释。自己真机调试尝试了诸多意识有个规律,就是开辟这一个选项,某些Label和Button的背景颜色都会冒出银白色,然而不是必先现的,有些Label和Button如故正常颜色背景。其他ImageView等控件是不相会世银白色的背景颜色,臆度是不是和文本Text的装置有涉嫌。假诺你对那个装有掌握,欢迎商量。

Color Non-Standard Surface Formats调试效果

Color Compositing Fast-Path Blue (高速路径)

Places a blue overlay over content that is detached from the
compositor.标记由硬件绘制的门径为褐色,褐色越多越好,可以对一贯动用OpenGL绘制的图层举行高亮。没有对OpenGL有过多的琢磨,所以这里没办法给出demo。大家只是须要记住粉红色越多越好就ok。

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

Color Immediately(颜色刷新频率)

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

Color Hits Green and Misses Red(光栅化)

本条选项首假若检測大家是是否正确利用layer的shouldRasterize属性。shouldRasterize
= YES开启光栅化。

咋样是光栅化?光栅化是将一个layer预先渲染成位图(bitmap),再增添到缓存中,成功被缓存的layer会标注为绿色,没有水到渠成缓存的会标明为褐色。正确运用光栅化可以取得肯定水平的属性提升。

适用意况:一般在图像内容不变的事态下才使用光栅化,比如设置阴影耗费资源比較多的静态内容,假若使用光栅化对性能的升级换代有早晚帮忙。
非适用情况:假若内容会时不时转移,这多少个时候不要开启,否则会导致性能的浪费。比如我们在应用tableViewCell中,一般不要用光栅化,由于tableViewCell的绘图相当频繁。内容在频频的变动。尽管使用了光栅化,会造成大气的离屏渲染降低性能。
假诺你在一个界面中使用了光栅化,刚进去这么些页面的有着应用了光栅化的控件layer都会是肉色。由于还不曾缓存成功。假使上下滑动你会意识,layer变成了肉色。

然则如果你滑动幅度较大会发现,新面世的控件会是新民主主义革命然后改成黄色,由于刚開始这多少个控件的layer还没有缓存。
注意点:
(1)系统给光栅化缓存分配了一个恒定的轻重。由此无法过度使用,假如超出了缓存也会招致离屏渲染。
(2)缓存的时辰为100ms。因而倘若在100ms内没有应用缓存的目的,则会从缓存中清除。
ca88亚洲城网站 4

UIImageView控件相比较新鲜,不仅需要自己那多少个容器是不透明的,并且imageView包含的情节图片也务必是不透明的,倘若你协调的图形出现了图层混合黄色,先反省是不是友好的代码有题目,如若确认代码没问题,就是图片自身的问题,可以交换你们的UI眉眉~

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重绘刷新的一种情况。而且你可知发现色情区域分外小,区域越小性能越好。
ca88亚洲城网站 5好了,花了几天的生机毕竟写完了~对Core
Animation的兼具调试选项也都表达了,假若你能在类型中客观运用。对App的属性提高肯定不可小看。当然这是指向试图的调剂格局,功效代码的计划是否成立也是影响属性非凡重要的一端。
自我才疏学浅。如有疏漏敬请评论指正,一块学习发展。假如你对以为对您有扶持欢迎点个赞哈~谢谢。

iOS开发学习互换qq群: 529560119

label.layer.masksToBounds = YES;

其一选项紧假如检测大家是是否正确利用layer的shouldRasterize属性,shouldRasterize

YES开启光栅化。什么是光栅化?光栅化是将一个layer预先渲染成位图(bitmap),再投入到缓存中,成功被缓存的layer会标注为粉色,没有得逞缓存的会标明为褐色,正确采用光栅化能够得到肯定水准的性质提高。
适用情况:一般在图像内容不变的情事下才使用光栅化,例如设置阴影耗费资源相比较多的静态内容,如若采纳光栅化对性能的升级换代有肯定协理。
非适用情况:假设情节会时不时转移,这些时候不要开启,否则会导致性能的浪费。例如我们在应用tableViewCell中,一般不要用光栅化,因为tableViewCell的绘图分外频繁,内容在持续的转变,假使采纳了光栅化,会导致大量的离屏渲染降低性能。
倘若您在一个界面中应用了光栅化,刚进来那个页面的装有应用了光栅化的控件layer都会是新民主主义革命,因为还从未缓存成功,倘诺前后滑动你会发觉,layer变成了黑色。但是假诺您滑动幅度较大会发现,新现身的控件会是新民主主义革命然后改成红色,因为刚最先这个控件的layer还没有缓存。
注意点:
(1)系统给光栅化缓存分配了一个稳住的高低,因而无法过度施用,假若超越了缓存也会招致离屏渲染。
(2)缓存的日子为100ms,因而一旦在100ms内尚未应用缓存的目的,则会从缓存中革除。

准备干活

在性能优化中一个最具參考价值的习性是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:
ca88亚洲城网站 6
打开CoreAnimation
ca88亚洲城网站 7
CoreAnimation调试界面
图中1是FPS值。

图中2是见仁见智纬度的调节选项(以下会挨个介绍)。

如若您在lldb中po打印某个控件,你会发觉打印出来的数码中,控件的opaque都是true,因为控件这个特性的默认值都是true,所以首先种艺术可以直接忽略掉。使用第两种格局您会发觉前边粉色的都消除掉了。

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

Places a blue overlay over content that is detached from the
compositor.标记由硬件绘制的路线为青色,绿色越多越好,可以对直接行使OpenGL绘制的图层举行高亮。没有对OpenGL有过多的探讨,所以那边没办法给出demo,我们只需要记住黄色越多越好就ok。

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,所以率先种办法能够直接忽略掉。

使用第三种方法您会发现前边褐色的都清除掉了。
ca88亚洲城网站 8
安装不透明往日
ca88亚洲城网站 9
安装不透明之后

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

到这边您或许想不到。设置label的背景象第一行不就够了么。为啥还有第二行?这是出于假若label的始末是粤语。label实际渲染区域要大于label的size,最外层多了一个sublayer,假使不设置第二行label的边缘外层灰出现图层混合的壬子革命,由此必须在label内容是中文的状况下加第二句。单独使用label.layer.masksToBounds
= YES是不会时有暴发离屏渲染,下文会讲离屏渲染。
注意点:UIImageView控件比較特殊。不仅须要自身这一个容器是不透明的,而且imageView包括的始末图片也务必是不透明的,假诺你协调的图形现身了图层混合紫色,先反省是不是友好的代码有问题,要是确认代码没问题。就是图表自身的题材。可以联系你们的UI眉眉~

(2)给View设置一个不透明的颜料,没有例外需要设置白色即可。

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 Misaligned Images(图片大小)

其一选项可以帮助大家查阅图片大小是否科学展现。假若image size和imageView
size不兼容,image会现身青色。要尽可能的狂跌红色的面世,由于image
size与imageView size不匹配,会耗费资源减弱图片。

下图中的image实际size(81,110)。顶部image正常,底部image出现肉色由于位于了一个size
x 2的imageView容器中。
ca88亚洲城网站 10

若果出现图层混合了,打开Color Blended
Layers选项,那块区域会体现黑色,所以我们调试的目标就是将革命区域消减的越少越好。那么怎样压缩绿色区域的出现吧?只要设置控件不透明即可。

Color Hits Green and Misses Red(光栅化)

Color Immediately(颜色刷新频率)

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

1是fps  2是调节选项

准备工作

在性能优化中一个最具参考价值的习性是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 Non-Standard Surface Formats (不正规的外表颜色格式)

其一调试选项没有一篇博文讲过,都是直接略过,我也尝尝相当多途径去找那个选项究竟是什么效劳,不过苹果支付文档以及stack
overflow都并未对这些装有解释。自己真机调试尝试了这些多发现有个规律,就是打开那些选项。某些Label和Button的背景颜色都会并发银白色。不过不是必先现的。有些Label和Button如故正常颜色背景。

另外ImageView等控件是不会现出银白色的背景颜色,算计是不是和文本Text的装置有提到。假诺你对这一个装有掌握。欢迎啄磨。
ca88亚洲城网站 11

选项二:Color Hits Green and Misses Red(光栅化)

当App发展到一定的范畴,性能优化就改成不可或缺的一些。不过不少人,又对性能优化很生疏,毕竟平日差不多岁月都在写作业逻辑,很少关心这个。如今在优化自己的体系,也采集了成千上万资料,这里先浅谈一下应用Instruments中CoreAnimation优化收获的经验以及总计,这是第一篇,后续会更新提姆er
Profiler,Leaks等其它优化工具的求实用法。

挑选一:Color Blended Layers (图层混合)

向原创作者致敬 : http://www.cocoachina.com/ios/20161211/18341.html

**那么些选项重假诺检测咱们是是否正确使用layer的shouldRasterize属性,shouldRasterize

YES开启光栅化。什么是光栅化?光栅化是将一个layer预先渲染成位图(bitmap),再插足到缓存中,成功被缓存的layer会标注为藏蓝色,没有水到渠成缓存的会标注为革命,正确运用光栅化可以博得一定程度的属性提高。
**

适用情形:一般在图像内容不变的意况下才使用光栅化,例如设置阴影耗费资源相比较多的静态内容,假使采取光栅化对性能的晋级有早晚帮忙。

非适用境况:如若情节会时不时转移,这多少个时候不要开启,否则会导致性能的浪费。例如大家在应用tableViewCell中,一般不要用光栅化,因为tableViewCell的绘图很是频繁,内容在频频的变化,如若选取了光栅化,会造成大气的离屏渲染降低性能。

倘若你在一个界面中应用了光栅化,刚进入这么些页面的装有应用了光栅化的控件layer都会是戊寅革命,因为还从未缓存成功,倘若前后滑动你会发觉,layer变成了藏红色。然而假设你滑动幅度较大会发现,新面世的控件会是丁亥革命然后改成蓝色,因为刚起先那一个控件的layer还一直不缓存。

注意点:

(1)系统给光栅化缓存分配了一个一定的轻重,因而无法过度施用,假使过量了缓存也会导致离屏渲染。

(2)缓存的时光为100ms,因而只要在100ms内并未使用缓存的对象,则会从缓存中消除。

采用三: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 Non-Standard Surface Formats (不正经的表面颜色格式)

本条调试选项没有一篇博文讲过,都是直接略过,我也尝试很多路子去找这一个选项到底是什么功效,但是苹果支付文档以及stack
overflow都未曾对这么些富有解释。自己真机调试尝试了好多意识有个规律,就是打开这些选项,某些Label和Button的背景颜色都会冒出银白色,不过不是必先现的,有些Label和Button依然正常颜色背景。其他ImageView等控件是不会产出银白色的背景颜色,猜测是不是和文本Text的装置有涉嫌。假诺您对那些装有了解,欢迎讨论。

**选项五: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容器中。

ca88亚洲城网站 12

选用七: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设置了圆角,触发离屏渲染:

ca88亚洲城网站 13

为了尽可能防止触发离屏渲染,我们得以换其他手段来实现必要的效用:

(1)阴影绘制shadow:使用ShadowPath来顶替shadowOffset等属性的装置

imageViewLayer.shadowPath = CGPathCreateWithRect(imageRect, NULL);

(2)利用GraphicsContex生成一张带圆角的图形或者view,这里不写具体落实过程,需要的可以度娘Copy,很多现成的代码。

采纳八:Color Compositing 法斯特(Fast)(Fast)-Path Blue (快捷路径)

Places a blue overlay over content that is detached from the
compositor.标记由硬件绘制的途径为棕色,红色越多越好,可以对直接利用OpenGL绘制的图层举行高亮。没有对OpenGL有过多的研商,所以这里没办法给出demo,我们只需要牢记肉色越多越好就ok。

选料九: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重绘刷新的一种情况,并且你可以发现色情区域很小,区域越小性能越好。

ca88亚洲城网站 14

ca88亚洲城网站 15

到此处您恐怕想不到,设置label的背景观第一行不就够了么,为啥还有第二行?这是因为假若label的始末是中文,label实际渲染区域要大于label的size,最外层多了一个sublayer,即使不设置第二行label的边缘外层会并发图层混合的革命,由此需要在label内容是普通话的气象下加第二句。单独行使label.layer.masksToBounds
= YES是不会生出离屏渲染,下文会讲离屏渲染。

label.backgroundColor = [UIColor whiteColor];

调剂选项介绍:

本条选项是检测哪个地方发生了图层混合,先介绍一下怎样是图层混合?很多状态下,界面都是会并发四个UI控件叠加的动静,如若有晶莹剔透或者半晶莹剔透的控件,那么GPU会去总括那个这个layer最后的呈现的颜色,也就是咱们肉眼所见到的功效。例如一个上层Veiw颜色是藏黑色RGB(0,255,0),下层又放了一个View颜色是新民主主义革命RGB(0,0,255),透明度是50%,那么最后展现到我们面前的水彩是褐色RGB(0,127.5,127.5)。那个总括过程会耗费一定的GPU资源消耗性能。即便大家把上层的黑色View改为不透明,
那么GPU就无须耗费资源总结,间接体现褐色。混合颜色总计公式:

相关文章