CADisplayLink 和 NSTimer

<span style="font-size:14px;"><strong>CADisplayLink 與 NSTimer 有什麼不同</strong></span>

iOS設備的屏幕刷新頻率是固定的,CADisplayLink在正常情況下會在每次刷新結束都被調用,精確度相當高。
NSTimer的精確度就顯得低了點,比如NSTimer的觸發時間到的時候,runloop如果在阻塞狀態,觸發時間就會推遲到下一個runloop週期。並且 NSTimer新增了tolerance屬性,讓用戶可以設置可以容忍的觸發的時間的延遲範圍。
CADisplayLink使用場合相對專一,適合做UI的不停重繪,比如自定義動畫引擎或者視頻播放的渲染。NSTimer的使用範圍要廣泛的多,各種需要單次或者循環定時處理的任務都可以使用。在UI相關的動畫或者顯示內容使用 CADisplayLink比起用NSTimer的好處就是我們不需要在格外關心屏幕的刷新頻率了,因爲它本身就是跟屏幕刷新同步的。

NSTimer初始化器接受調用方法邏輯之間的間隔作爲它的其中一個參數,預設一秒執行30次。

CADisplayLink默認每秒運行60次,通過它的frameInterval屬性改變每秒運行幀數,如設置爲2,意味CADisplayLink每隔一幀運行一次,有效的邏輯每秒運行30次。


CADisplayLink
CADisplayLink *displaylink = [CADisplayLink displayLinkWithTarget:self selector:@selector(updateAttributedString)];

displaylink.paused = YES;

[displaylink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];


NSTimer

float theInterval = 1.0 / 30.0f;  //每秒調用30次

NSTimer *theTimer = [NSTimer scheduledTimerWithTimeInterval:theInterval target:self selector:@selector(updateAttributedString) userInfo:nil repeats:YES];

發佈了29 篇原創文章 · 獲贊 6 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章