淺談iOS Rendering 技術(shù)框架

淺談iOS Rendering 技術(shù)框架

*?? iOS 渲染相關(guān)的層級(jí)劃分大概如下:

UIKit -> CoreAnimation -> OpenGL ES = CoreGraphics -> Graphics Hardware (GPU)

UIKit

我們?nèi)粘i_(kāi)發(fā)中使用的用戶交互組件都來(lái)自于 UIKit Framework,我們通過(guò)設(shè)置 UIKit 組件的 Layout 以及 BackgroundColor 等屬性來(lái)完成日常的界面繪畫(huà)工作

CoreAnimation

Core Animation 本質(zhì)上可以理解為是一個(gè)復(fù)合引擎,旨在盡可能快的組合屏幕上不同的顯示內(nèi)容边酒。這些顯示內(nèi)容被分解成獨(dú)立的圖層苹威,即 CALayer袁滥,CALayer 才是你所能在屏幕上看見(jiàn)的一切的基礎(chǔ)厕九,我們稱之為圖層樹(shù)

OpenGL ES

OpenGL ES 簡(jiǎn)稱 GLES颈娜,即 OpenGL for Embedded Systems自晰,是 OpenGL 的子集凝化,通常面向圖形硬件加速處理單元(GPU)渲染 2D 和 3D 計(jì)算機(jī)圖形

Core Graphics

Core Graphics Framework 基于 Quartz 高級(jí)繪圖引擎。它提供了具有無(wú)與倫比的輸出保真度的低級(jí)別輕量級(jí) 2D 渲染酬荞。您可以使用此框架來(lái)處理基于路徑的繪圖搓劫,轉(zhuǎn)換,顏色管理混巧,離屏渲染枪向,圖案,漸變和陰影咧党,圖像數(shù)據(jù)管理秘蛔,圖像創(chuàng)建和圖像遮罩以及 PDF 文檔創(chuàng)建,顯示和分析

CPU 資源消耗原因和解決方案

  1. 對(duì)象創(chuàng)建:對(duì)象的創(chuàng)建會(huì)分配內(nèi)存傍衡、調(diào)整屬性深员、甚至還有讀取文件等操作,比較消耗 CPU 資源蛙埂。例如:通過(guò) Storyboard 創(chuàng)建視圖對(duì)象時(shí)倦畅,其資源消耗會(huì)比直接通過(guò)代碼創(chuàng)建對(duì)象要大非常多, CALayer 比 UIView 要輕量許多绣的,那么不需要響應(yīng)觸摸事件的控件叠赐,用 CALayer 顯示會(huì)更加合適
  2. 對(duì)象調(diào)整:調(diào)整視圖層次、添加和移除視圖屡江,UIView 的屬性進(jìn)行調(diào)整時(shí)芭概,消耗的資源要遠(yuǎn)大于一般的屬性。對(duì)此你在應(yīng)用中惩嘉,應(yīng)該盡量減少不必要的屬性修改
  3. 對(duì)象銷毀:對(duì)象的銷毀雖然消耗資源不多谈山,但累積起來(lái)也是不容忽視的
  4. 布局計(jì)算:Autolayout 是蘋(píng)果本身提倡的技術(shù),在大部分情況下也能很好的提升開(kāi)發(fā)效率宏怔,但是 Autolayout 對(duì)于復(fù)雜視圖來(lái)說(shuō)常常會(huì)產(chǎn)生嚴(yán)重的性能問(wèn)題奏路。頻繁的畴椰,多次的修改布局會(huì)很消耗資源,使用ComponentKit鸽粉、AsyncDisplayKit等框架
  5. 文本計(jì)算斜脂,渲染:常見(jiàn)的文本控件 (UILabel、UITextView 等)触机,其排版和繪制都是在主線程進(jìn)行的帚戳,當(dāng)顯示大量文本時(shí),CPU 的壓力會(huì)非常大儡首,當(dāng)然很少會(huì)出現(xiàn)這種現(xiàn)象片任,如果要解決這種現(xiàn)象,用CoreText蔬胯,占用內(nèi)存較少对供,可以緩存下來(lái)以備稍后多次渲染
  6. 圖片的解碼,圖像的繪制:在后臺(tái)線程先把圖片繪制到 CGBitmapContext 中氛濒,然后從 Bitmap 直接創(chuàng)建圖片产场。圖像的繪制通常是指用那些以 CG 開(kāi)頭的方法把圖像繪制到畫(huà)布中,然后從畫(huà)布創(chuàng)建圖片并顯示這樣一個(gè)過(guò)程舞竿。這個(gè)最常見(jiàn)的地方就是 [UIView drawRect:] 里面了京景。由于 CoreGraphic 方法通常都是線程安全的,所以圖像的繪制可以很容易的放到后臺(tái)線程進(jìn)行

GPU 資源消耗原因和解決方案

  1. 紋理的渲染:所有的 Bitmap骗奖,包括圖片确徙、文本、柵格化的內(nèi)容执桌,最終都要由內(nèi)存提交到顯存鄙皇,綁定為 GPU Texture。不論是提交到顯存的過(guò)程鼻吮,還是 GPU 調(diào)整和渲染 Texture 的過(guò)程,都要消耗不少 GPU 資源较鼓。
  2. 視圖的混合:如果視圖結(jié)構(gòu)過(guò)于復(fù)雜椎木,混合的過(guò)程也會(huì)消耗很多 GPU 資源。為了減輕這種情況的 GPU 消耗博烂,應(yīng)用應(yīng)當(dāng)盡量減少視圖數(shù)量和層次香椎,并在不透明的視圖里標(biāo)明 opaque 屬性以避免無(wú)用的 Alpha 通道合成
  3. 圖形的生成:CALayer 的 border、圓角禽篱、陰影畜伐、遮罩(mask),CASharpLayer 的矢量圖形顯示躺率,通常會(huì)觸發(fā)離屏渲染(offscreen rendering)玛界,而離屏渲染通常發(fā)生在 GPU 中万矾。

只有找到消耗的原因和對(duì)應(yīng)的過(guò)程,才能針對(duì)性的去優(yōu)化慎框。圓角l為啥會(huì)造成資源消耗良狈,消耗的又是什么資源?又怎么去優(yōu)化笨枯?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末薪丁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子馅精,更是在濱河造成了極大的恐慌严嗜,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件洲敢,死亡現(xiàn)場(chǎng)離奇詭異漫玄,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)沦疾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門称近,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人哮塞,你說(shuō)我怎么就攤上這事刨秆。” “怎么了忆畅?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵衡未,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我家凯,道長(zhǎng)缓醋,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任绊诲,我火速辦了婚禮送粱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘掂之。我一直安慰自己抗俄,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布世舰。 她就那樣靜靜地躺著动雹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪跟压。 梳的紋絲不亂的頭發(fā)上胰蝠,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼茸塞。 笑死躲庄,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的翔横。 我是一名探鬼主播读跷,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼禾唁!你這毒婦竟也來(lái)了效览?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤荡短,失蹤者是張志新(化名)和其女友劉穎丐枉,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體掘托,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瘦锹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了闪盔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弯院。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖泪掀,靈堂內(nèi)的尸體忽然破棺而出听绳,到底是詐尸還是另有隱情,我是刑警寧澤异赫,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布椅挣,位于F島的核電站,受9級(jí)特大地震影響塔拳,放射性物質(zhì)發(fā)生泄漏鼠证。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一靠抑、第九天 我趴在偏房一處隱蔽的房頂上張望量九。 院中可真熱鬧,春花似錦颂碧、人聲如沸荠列。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)弯予。三九已至戚宦,卻和暖如春个曙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工垦搬, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留呼寸,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓猴贰,卻偏偏與公主長(zhǎng)得像对雪,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子米绕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,097評(píng)論 1 32
  • 卷首語(yǔ) 歡迎來(lái)到 objc.io 的第三期瑟捣! 這一期都是關(guān)于視圖層的。當(dāng)然視圖層有很多方面栅干,我們需要把它們縮小到幾...
    評(píng)評(píng)分分閱讀 1,765評(píng)論 0 18
  • 一迈套、屏幕顯像原理 上圖顯示的是CRT電子槍掃描路徑,涉及到兩個(gè)比較重要的概念:水平同步信號(hào)(HSync),垂直同步...
    綠葉竹林閱讀 1,145評(píng)論 1 3
  • 書(shū)寫(xiě)的很好碱鳞,翻譯的也棒桑李!感謝譯者,感謝感謝窿给! iOS-Core-Animation-Advanced-Techni...
    錢噓噓閱讀 2,296評(píng)論 0 6
  • 姓名:徐芳芳 公司:南京凱弘進(jìn)出口貿(mào)易有限公司 349期努力二組【日精進(jìn)打卡第219天】 【知~學(xué)習(xí)】 《六項(xiàng)精進(jìn)...
    徐芳芳_4548閱讀 137評(píng)論 0 0