什么是FPS莲组?
FPS = Frames Per Second 每秒渲染多少幀诊胞。
更確切的解釋是“每秒鐘填充圖像的幀數(shù)(幀/秒)”。
FPS是測量用于保存锹杈、顯示動態(tài)視頻的信息數(shù)量厢钧。
通俗來講就是指動畫或視頻的畫面數(shù)鳞尔。例如在電影視頻及數(shù)字視頻上,* * 每一幀都是靜止的圖象早直;快速連續(xù)地顯示幀便形成了運動的假象寥假。
每秒鐘幀數(shù) (FPS) 愈多,所顯示的動作就會愈流暢霞扬。通常糕韧,要避免動作不流暢的最低FPS是30。
某些計算機視頻格式喻圃,例如 AVI萤彩,每秒只能提供15幀。這里的“FPS”也可以理解為我們常說的“刷新率(單位為Hz)”斧拍,例如我們常在CS游戲里說的“FPS值”雀扶。
我們在裝機選購顯卡和顯示器的時候,都會注意到“刷新率”肆汹。一般我們設(shè)置缺省刷新率都在75Hz(即75幀/秒)以上愚墓。例如:75Hz的刷新率刷也就是指屏幕一秒內(nèi)只掃描75次,即75幀/秒昂勉。而當(dāng)刷新率太低時我們?nèi)庋鄱寄芨杏X到屏幕的閃爍浪册,不連貫,對圖像顯示效果和視覺感觀產(chǎn)生不好的影響岗照。
什么是CADisplayLink?
CADisplayLink 是一個能讓我們以和屏幕刷新率相同的頻率將內(nèi)容畫到屏幕上的定時器村象。
我們在應(yīng)用中創(chuàng)建一個新的CADisplayLink對象,把它添加到一個'runloop'中攒至,并給它提供一個target和selector在屏幕刷新的時候調(diào)用厚者。一但CADisplayLink以特定的模式注冊到runloop之后,每當(dāng)屏幕需要刷新的時候迫吐,runloop就會調(diào)用CADisplayLink綁定的target上的selector籍救,這時target可以讀到CADisplayLink的每次調(diào)用的時間戳,用來準(zhǔn)備下一幀顯示需要的數(shù)據(jù)渠抹。
例如一個視頻應(yīng)用使用時間戳來計算下一幀要顯示的視頻數(shù)據(jù)蝙昙。在UI做動畫的過程中,需要通過時間戳來計算UI對象在動畫的下一幀要更新的大小等等梧却。
在添加進runloop的時候我們應(yīng)該選用高一些的優(yōu)先級奇颠,來保證動畫的平滑》藕剑可以設(shè)想一下烈拒,我們在動畫的過程中,runloop被添加進來了一個高優(yōu)先級的任務(wù),那么,下一次的調(diào)用就會被暫停轉(zhuǎn)而先去執(zhí)行高優(yōu)先級的任務(wù),然后在接著執(zhí)行CADisplayLink的調(diào)用荆几,從而造成動畫過程的卡頓吓妆,使動畫不流暢。
duration屬性提供了每幀之間的時間吨铸,也就是屏幕每次刷新之間的的時間行拢。我們可以使用這個時間來計算出下一幀要顯示的UI的數(shù)值。但是duration只是個大概的時間诞吱,如果CPU忙于其它計算舟奠,就沒法保證以相同的頻率執(zhí)行屏幕的繪制操作,這樣會跳過幾次調(diào)用回調(diào)方法的機會房维。
frameInterval屬性是可讀可寫的NSInteger型值沼瘫,標(biāo)識間隔多少幀調(diào)用一次selector方法,默認(rèn)值是1咙俩,即每幀都調(diào)用一次耿戚。
如果每幀都調(diào)用一次的話,對于iOS設(shè)備來說那刷新頻率就是60HZ也就是每秒60次阿趁,如果將frameInterval設(shè)為2 那么就會兩幀調(diào)用一次膜蛔,也就是變成了每秒刷新30次。
我們通過pause屬性開控制CADisplayLink的運行歌焦。當(dāng)我們想結(jié)束一個CADisplayLink的時候,應(yīng)該調(diào)用-(void)invalidate從runloop中刪除并刪除之前綁定的target跟selector另外CADisplayLink不能被繼承砚哆。
FPS檢測工具
FPS_OC是OC版本的FPS檢測工具独撇,只需要一行代碼如下:
//如果可以給我一個星星就非常感謝了。有問題我會及時回復(fù)
//開啟檢測
[[FPS_OC sharedFps]start];