- public class NSTimer : NSObject
定時器的作用:
- 創建並啓動定時器
- 默認將時鐘以NSDefaultRunLoopMode模式添加到運行循環
- 用戶發生交互的時候時鐘將暫停
- /*
- public class func scheduledTimerWithTimeInterval(ti: NSTimeInterval,
- target aTarget: AnyObject,
- selector aSelector: Selector,
- userInfo: AnyObject?,
- repeats yesOrNo: Bool) -> NSTimer
- 參數:
- TimeInterval:觸發時間,單位秒
- target:定時起觸發對象
- selector:定時器響應方法
- userInfo:用戶信息
- repeats:是否重複執行,YES 每個指定的時間重複執行,NO 只執行一次
- */
- // 創建並啓動定時器
- let timer:NSTimer = NSTimer.scheduledTimerWithTimeInterval(2.0,
- target: self,
- selector: #selector(YPScrollView.timerChange),2
- userInfo: nil,
- repeats: true)
(2)timer方式
- 創建定時器添加到運行循環
- 將時鐘以指定模式添加到運行循環
- /*
- mode:
- NSDefaultRunLoopMode: 時鐘,網絡。 發生用戶交互的時候,時鐘會被暫停
- NSRunLoopCommonModes: 用戶交互,響應級別高。 發生用戶交互的時候,時鐘仍然會觸發,如果時鐘觸發方法非常
- 耗時,使用此方式時用戶操作會造成非常嚴重的卡頓。
- */
- // 創建定時器
- let timer:NSTimer = NSTimer(timeInterval: 2.0,
- target: self,
- selector: #selector(ViewController.updateTimer(_:)),
- userInfo: nil,
- repeats: true)
- // 將定時器添加到運行循環
- NSRunLoop.currentRunLoop().addTimer(timer, forMode: NSRunLoopCommonModes)
定時器的啓動與關閉
- // 啓動定時器
- timer.fireDate = NSDate.distantFuture()
- // 暫停定時器
- timer.fireDate = NSDate.distantPast()
- // 關閉定時器,永久關閉定時器
- timer.invalidate()
子線程定時器的創建
- 在子線程創建定時器時,需要手動開啓子線程的運行循環
- dispatch_async(dispatch_get_global_queue(0, 0)) {
- // 在子線程創建定時器
- /*
- scheduled 或 timer 方式創建
- */
- let timer:NSTimer = NSTimer(timeInterval: 2.0,
- target: self,
- selector: #selector(ViewController.updateTimer(_:)),
- userInfo: nil,
- repeats: true)
- NSRunLoop.currentRunLoop().addTimer(timer, forMode: NSRunLoopCommonModes)
- // 啓動子線程的運行循環
- /*
- 這句代碼就是一個死循環!如果不停止運行循環,不會執行添加到此句之後的任何代碼
- */
- CFRunLoopRun()
- // 停止子線程運行循環之前,不會執行添加到此處的任何代碼
- }
- var num:Int = 0
- func updateTimer(timer:NSTimer) {
- num = num + 1
- // 滿足條件後,停止當前的運行循環
- if (num == 8) {
- // 停止當前的運行循環
- /*
- 一旦停止了運行循環,後續代碼能夠執行,執行完畢後,線程被自動銷燬
- */
- CFRunLoopStop(CFRunLoopGetCurrent())
- }
- }
定時任務
- // 延時調用
- /*
- 1.5 秒後自動調用 self 的 hideHUD 方法
- */
- self.performSelector(#selector(NsTimer.hideHUD), withObject: nil, afterDelay: 1.5)
- // 取消延時調用
- NSObject.cancelPreviousPerformRequestsWithTarget(self, selector: #selector(NsTimer.hideHUD), object: nil)
- // 多線程
- /*
- 1.5 秒後自動執行 block 裏面的代碼
- */
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(1.5 * Double(NSEC_PER_SEC))), dispatch_get_main_queue()) {
- self.hud.alpha = 0.0;
- }
- // 定時器
- /*
- 1.5 秒後自動調用 self 的 hideHUD 方法
- */
- NSTimer.scheduledTimerWithTimeInterval(1.5,
- target: self,
- selector: #selector(NsTimer.hideHUD),
- userInfo: nil,
- repeats: false)