1. 程式人生 > >iOS中兩種定時器的使用和區別

iOS中兩種定時器的使用和區別

有時候我們需要通過定時器來指定每隔一段時間執行一段操作。

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];
需要移除的時候可以通過下述程式碼實現:
[link removeFromRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
CADisplayLink 可以設定暫停和停止兩個功能。
//暫停
link.paused = YES;
//停止定時器
[link invalidate];
針對以上特點,給出下面的選擇方案:
如果要表示畫面平滑移動,使用CADisplayLink
間隔時間1秒以上時候使用NSTimer