iOS中兩種定時器的使用和區別
阿新 • • 發佈:2019-02-13
有時候我們需要通過定時器來指定每隔一段時間執行一段操作。
iOS中有下面兩種方法可以實現相應功能。
最常用的是NSTimer
NSTimer * timer = [NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(func) userInfo:nil repeats:YES];
通過上述方式可以建立一個定時器並立即執行func方法,之後每隔1.5秒就執行一次func方法。
也可以手動開啟和停止定時器。
//開始定時器
[timer fire];
//停止定時器
[timer invalidate];
這裡的定時器一旦停止,就不能再次開啟,需要重新建立NSTimer
第二種方法是CADisplayLink
相比NSTimer,CADisplayLink的執行更為細膩。
CADisplayLink預設每秒執行60次。
建立定時器:
CADisplayLink * link = [CADisplayLink displayLinkWithTarget:self selector:@selector(func)];
在建立定時器後,需要把這個定時器手動加到主事件迴圈中。
[link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
需要移除的時候可以通過下述程式碼實現:
CADisplayLink 可以設定暫停和停止兩個功能。[link removeFromRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
//暫停
link.paused = YES;
//停止定時器
[link invalidate];
針對以上特點,給出下面的選擇方案:如果要表示畫面平滑移動,使用CADisplayLink
間隔時間1秒以上時候使用NSTimer