大多數(shù)工作在Core Animation的CPU都發(fā)生在動(dòng)畫(huà)開(kāi)始之前。這意味著它不會(huì)影響到幀率,所以很好侦高,但是他會(huì)延遲動(dòng)畫(huà)開(kāi)始的時(shí)間,讓你的界面看起來(lái)會(huì)比較遲鈍胖眷。
以下CPU的操作都會(huì)延遲動(dòng)畫(huà)的開(kāi)始時(shí)間:
布局計(jì)算 - 如果你的視圖層級(jí)過(guò)于復(fù)雜武通,當(dāng)視圖呈現(xiàn)或者修改的時(shí)候,計(jì)算圖層幀率就會(huì)消耗一部分時(shí)間珊搀。特別是使用iOS6的自動(dòng)布局機(jī)制尤為明顯冶忱,它應(yīng)該是比老版的自動(dòng)調(diào)整邏輯加強(qiáng)了CPU的工作。
視圖懶加載 - iOS只會(huì)當(dāng)視圖控制器的視圖顯示到屏幕上時(shí)才會(huì)加載它境析。這對(duì)內(nèi)存使用和程序啟動(dòng)時(shí)間很有好處囚枪,但是當(dāng)呈現(xiàn)到屏幕上之前,按下按鈕導(dǎo)致的許多工作都會(huì)不能被及時(shí)響應(yīng)劳淆。比如控制器從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)链沼,或者視圖從一個(gè)nib文件中加載,或者涉及IO的圖片顯示(見(jiàn)后續(xù)“IO相關(guān)操作”)沛鸵,都會(huì)比CPU正常操作慢得多括勺。
Core Graphics繪制 - 如果對(duì)視圖實(shí)現(xiàn)了-drawRect:方法,或者CALayerDelegate的-drawLayer:inContext:方法曲掰,那么在繪制任何東西之前都會(huì)產(chǎn)生一個(gè)巨大的性能開(kāi)銷(xiāo)疾捍。為了支持對(duì)圖層內(nèi)容的任意繪制,Core Animation必須創(chuàng)建一個(gè)內(nèi)存中等大小的寄宿圖片栏妖。然后一旦繪制結(jié)束之后乱豆,必須把圖片數(shù)據(jù)通過(guò)IPC傳到渲染服務(wù)器。在此基礎(chǔ)上吊趾,Core Graphics繪制就會(huì)變得十分緩慢宛裕,所以在一個(gè)對(duì)性能十分挑剔的場(chǎng)景下這樣做十分不好。
解壓圖片 - PNG或者JPEG壓縮之后的圖片文件會(huì)比同質(zhì)量的位圖小得多趾徽。 但是在圖片繪制到屏幕上之前续滋,必須把它擴(kuò)展成完整的未解壓的尺寸(通常等同于圖片寬 x 長(zhǎng) x 4個(gè)字節(jié))。為了節(jié)省內(nèi)存孵奶,iOS通常直到真正繪制的時(shí)候才去解碼圖片(14章“圖片IO”會(huì)更詳細(xì)討論)疲酌。根據(jù)你加載圖片的方式,第一次對(duì)圖層內(nèi)容賦值的時(shí)候(直接或者間接使用UIImageView)或者把它繪制到Core Graphics中了袁,都需要對(duì)它解壓朗恳,這樣的話(huà),對(duì)于一個(gè)較大的圖片载绿,都會(huì)占用一定的時(shí)間粥诫。