性能問(wèn)題
網(wǎng)絡(luò)請(qǐng)求,大部分網(wǎng)絡(luò)請(qǐng)求都應(yīng)該使用后臺(tái)線程完成,如果你使用的是 AFNetworking、 SDWebImage 這些開(kāi)源緩存庫(kù),那么切換到后臺(tái)去請(qǐng)求網(wǎng)絡(luò)資源的操作都已經(jīng)默認(rèn)完成。
本地?cái)?shù)據(jù)讀寫(xiě)和計(jì)算,當(dāng)你需要從閃存中讀取文件的時(shí)候,這些操作都應(yīng)該使用GCD或者NSThread切換至后臺(tái)線程中完成。
圖像的處理,盡量使用合適的UIImage給予UIImageView使用,何謂合適?已經(jīng)提前剪裁、縮放好的圖片是最佳的,否則當(dāng)UIImage賦予UIImageView.image的時(shí)候,iOS會(huì)有不必要的計(jì)算開(kāi)銷,而這些開(kāi)銷卻是可以提前手動(dòng)緩存起來(lái)的。
Layer 屬性的謹(jǐn)慎選擇,不合理的 Layer 特效(陰影、圓角)都會(huì)使流暢的滑動(dòng)變成卡頓(非常重要)。
少用 UIView.backgroundColor = UIColor.clearColor(),透明的背景會(huì)加劇卡頓。
文字的渲染,你可能不知道,文字的渲染也是需要開(kāi)銷的。一般來(lái)說(shuō),文字渲染的開(kāi)銷非常小,甚至不能察覺(jué)到。但是,當(dāng)一個(gè)UILabel被賦予大段富文本文字后,開(kāi)銷就會(huì)非常大。
圖像的渲染,一個(gè)任何開(kāi)發(fā)者、幾乎所有庫(kù)(包括SDWebImage)都無(wú)法解決的問(wèn)題,圖像在UIImageView中的渲染開(kāi)銷,并且圖像的渲染只能在主線程中執(zhí)行。
前五點(diǎn)都是可以在 UIView 的基礎(chǔ)上解決的,如果前五點(diǎn)均優(yōu)化完成后,仍然無(wú)法解決卡頓問(wèn)題,則應(yīng)該使用 AsyncDisplayKit。
未完待續(xù)。。。