属性调优皇冠直营现金网开户

备注:有不少老大好的作品说把shouldRasterize(光栅化)个人觉得应依照PS内部专业术语来讲,个人明白。

勿领会出无起同伴不知道这一个字“栅”怎么读了,我专门百度了一晃,有四栽读法。

栅栏有四独读法:zhà,cè,shān,shi。

其详细分解啊:

栅 [zhà]:用竹木铁条等做成的阻拦物:~栏。~子。


[shān]:1.〔~极〕多极电子管因阴极的一个电极。2.〔光~〕爆发只是之衍射图像的光学仪器

栅 [shi]:〔上~〕〔下~〕地名,均于中国浙江省。

栅格化(PS专业术语)

栅(shān)格化,是PS备受之一个专业术语,栅格即像素,栅格化即将矢量图形转化为各种图(栅格图像)。最基础之栅格化算法将大半边形表示的老三维场合渲染及二维表面。

位图

相是位图术语相比茫然,然后自己问了弹指间咱局之UI,才清楚是术语。

皇冠直营现金网开户,自之领悟:图像尚未被栅格化在此以前任意放,都不会见失帧。而栅格化化之后要随着放大的翻番在搭,失帧会随着倍数的多而益。故:栅格化本身便是老大成一个固定像从的图像。

1. 关于CALayer的shouldRasterize(栅格化)

@property BOOL shouldRasterize;

     When true, the layer is rendered as a bitmap in its local
coordinate  space (“rasterized”), then the bitmap is composited into the
destination (with the minificationFilter and magnificationFilter
 properties of the layer applied if the bitmap needs scaling).
Rasterization occurs after the layer’s filters and shadow effects are
applied, but before the opacity modulation. As an implementation  detail
the rendering engine may attempt to cache and reuse the bitmap from one
frame to the next. (Whether it does or not will have no affect on the
rendered output.) When false the layer is composited directly into the
destination whenever possible (however, certain features of the
compositing model may force rasterization, e.g. adding filters).
Defaults to NO. 

运阴影时同时设置 shadowPath
就能免离屏渲染大大升级性,然而使用不当也碰面招致性能的吃。

CALayer 有一个 shouldRasterize 属性,将此特性设置成 true
后虽翻开了光栅化。开启shouldRasterize后,CALayer会被栅格化为bitmap,layer的影等功用也会叫保留到bitmap中,光栅化后相会拿图层绘制到一个屏幕外之图像,然后是图像将会师吃缓存起来并绘制到实际图层的
contents
和子图层,对于有为数不少的子图层或者发复杂的功能下,这样做就碰面比重绘有事务的保有帧来更加便捷。不过光栅化原始图像需要时间,而且会消耗额外之内存。

为此:当我们被栅格化后,需要注意4点题材。

  1. 若我们立异都栅格化的layer,会导致大气的offscreen渲染。

    由此CALayer的栅格化选项之开启也得大家仔细衡量拔取处境。只好用在图像内容未转移的前提下之:

            用于制止静态内容之错综复杂特效的重绘,例如前边说到的UIBlurEffect

            用于制止多单View嵌套的繁杂View的重绘。

    而对此平时转移的始末,这么些上绝不开,否则会促成性能的荒废。

比如大家日程时打交道的TableViewCell,因为TableViewCell的重绘是颇频繁之(因为Cell的复用),假若Cell的内容不断变化,则Cell需要不断重绘,倘若这时候设置了cell.layer可栅格化。则会招大量底offscreen渲染,降低图形性能。

当然,合理施用来说,是力所能及赢得广大性能的提升的,因为使用shouldRasterize后layer会缓存为Bitmap位图,对有补加了shawdow等效能的耗费资源比较多之静态内容展开缓存,可以取得性的升级换代。

  1. 毫不过于用,系统限制了缓存的轻重也2.5X Screen Size.

    假如过于用,超出缓存之后,同样会促成大量之offscreen渲染。

  1. 让栅格化的图形假如抢先100ms没有叫利用,则会让移除

    由此我们当只是对连接不停接纳的图形举办缓存。对于不常使用的图样缓存是向来不意义,且耗费资源的。

  1. 当 UIView.layer.shouldRasterize = YES
    时,生成的位图会缓冲起来,如果TabelView 滑动的当儿(UITableViewCell
    复用)使用缓存直接击中,就彰显青色,反之,倘诺不命中,这时就显得藏蓝色。藏蓝色越多,性能进一步差.

测试demo

图中生几乎只可以玩之地点

 1. 内外微小幅度滑动时,一向是黄色

  1. 内外比充裕幅面滑动,新面世的label一发端是青色,随后成为褐色

  2. 要静止一分钟,刚起滑动时会转换红。

立是坐layer举办栅格化后渲染成个图在缓存中。当屏幕出现滑动时,我们一向由缓存中读取而不要渲染,所以会合看到红色。当新的label出现经常,缓存中没单是label的位图,所以会变成红色。第三点相比重大,缓存中之目的有效期只出100ms,即要以0.1s内并未给运用就相会自动从缓存中清理出来。这便是干什么停留一会儿再滑动就相会相青色。

栅格化的缓存机制是一律将双刃剑,先勾勒副缓存还念博来或吃比较多的年月。因而栅格化光适用于比复杂的、静态的力量。通过Instrument的调节发现,这里以光栅化通常出现未命中缓存的境况,

总:假设View的Frame和Content不常转移,开启shouldRasterize = YES
,反的则毫不被浪费性能,假诺TableView滑动
Cell使用位图则是黑色,反的革命,紫色越多属性更好,褐色反之。

参考:

UI基特性能调优实战讲解

怎么样对地勾画好一个界面

Mastering UIKit
Performance

What triggers “Color Copied Images” and “Color Hits Green and Misses
Red” in
Instruments?

WWDC
2014

相关文章