最近興趣所致,想看看股票App中的K線是怎麼畫的,瞭解到畫K線有好幾種方案。原本一開始考慮到用Core Graphics重繪來繪製,但發現網上不少的解決方案都是用了CAShapeLayer來實現,比較少採用CG來重繪實現。故所以對這兩種方案的實現區別探究一下。性能
畫K線大概只有如下這三種方案:內存
這種方法的思路不錯,每次數據或顯示發生變化時,從新繪製整個繪製區域。這個方案的優勢很明顯,相對subView來講的低內存佔用,性能也還能夠。可是有個很明顯的缺點:CPU佔用太多容易形成卡頓。 爲何會有這個問題? 舉個例子,對於一個1024 1024的繪製的區域來講,其每次重繪區域大小是是1024 1024 * 4 字節 = 4 MB。也就是說每次重繪都須要從新刷新4MB的內存空間,這對於CPU來講是壓力很多的,特別是對於比較大的重繪來講,很是容易產生卡頓。這個主要是因爲Core Graphics繪的是Bitmap,內存佔用比較大,並且使用CPU來繪製,繪圖效率比較低下。博客
這種方案是爲了解決CG方案的缺點的。it
看了以上三個方案後,因爲要顯示大量K線行情,因此不可能纔有方案一。因爲要在一個小屏幕上顯示大量K線,並且每一個K線又比較小,例如顯示百日K線行情這種業務狀況下,使用CG後每次刷新數據容易卡頓,因此方案二不是一種比較好的解決方案。而方案三內存佔用少,又使用GPU加速,對於這種業務場景來講是比較合適的,因此能夠看到不少開源畫K線的項目都是使用CAShapeLayer這種方案的。class
之前寫博客總是想着要寫點有技術含量的東西,如今想來這種想法有點問題。博客這本質,更應該是記錄所想所學,而不是僅僅爲了展現本身所謂的有技術含量的東西,若是都是爲了展現,那爲了寫一篇「充滿技術含量的文章」,會充滿痛苦,並且寫出來的,通常都不滿意。與其這樣,不如看到什麼,整理一下,記錄下來,說不定,之後就變成「有技術含量」了呢?效率