swift代碼之路(五)NSTimer

  1. public class NSTimer : NSObject  

定時器的作用:

1、在指定的時間執行指定的任務
2、間隔一段時間執行指定任務

定時器的創建

定時器有兩種創建方式
(1)scheduled方式
  • 創建並啓動定時器
  • 默認將時鐘以NSDefaultRunLoopMode模式添加到運行循環
  • 用戶發生交互的時候時鐘將暫停
  1. /* 
  2.        public class func scheduledTimerWithTimeInterval(ti: NSTimeInterval,  
  3.                                             target aTarget: AnyObject,  
  4.                                         selector aSelector: Selector,  
  5.                                                   userInfo: AnyObject?,  
  6.                                            repeats yesOrNo: Bool) -> NSTimer 
  7.  
  8.        參數: 
  9.            TimeInterval:觸發時間,單位秒 
  10.            target:定時起觸發對象 
  11.            selector:定時器響應方法 
  12.            userInfo:用戶信息 
  13.            repeats:是否重複執行,YES 每個指定的時間重複執行,NO 只執行一次 
  14.    */  
  15.   
  16.    // 創建並啓動定時器  
  17.    let timer:NSTimer = NSTimer.scheduledTimerWithTimeInterval(2.0,   
  18.                                                        targetself,   
  19.                                                      selector: #selector(YPScrollView.timerChange),2  
  20.                                                      userInfo: nil,   
  21.                                                       repeatstrue)  

(2)timer方式
  • 創建定時器添加到運行循環
  • 將時鐘以指定模式添加到運行循環
  1. /* 
  2.     mode: 
  3.         NSDefaultRunLoopMode: 時鐘,網絡。           發生用戶交互的時候,時鐘會被暫停 
  4.         NSRunLoopCommonModes: 用戶交互,響應級別高。  發生用戶交互的時候,時鐘仍然會觸發,如果時鐘觸發方法非常 
  5.                                                     耗時,使用此方式時用戶操作會造成非常嚴重的卡頓。 
  6. */  
  7.   
  8. // 創建定時器  
  9. let timer:NSTimer = NSTimer(timeInterval: 2.0,   
  10.                                   targetself,   
  11.                                 selector: #selector(ViewController.updateTimer(_:)),   
  12.                                 userInfo: nil,   
  13.                                  repeatstrue)  
  14.   
  15. // 將定時器添加到運行循環  
  16. NSRunLoop.currentRunLoop().addTimer(timer, forMode: NSRunLoopCommonModes)  

定時器的啓動與關閉

  1. // 啓動定時器  
  2. timer.fireDate = NSDate.distantFuture()  
  3.       
  4. // 暫停定時器  
  5. timer.fireDate = NSDate.distantPast()  
  6.       
  7. // 關閉定時器,永久關閉定時器  
  8. timer.invalidate()  

子線程定時器的創建

  • 在子線程創建定時器時,需要手動開啓子線程的運行循環
  1. dispatch_async(dispatch_get_global_queue(00)) {   
  2.   
  3.       // 在子線程創建定時器  
  4.       /* 
  5.           scheduled 或 timer 方式創建 
  6.       */  
  7.       let timer:NSTimer = NSTimer(timeInterval: 2.0,   
  8.                            targetself,   
  9.                          selector: #selector(ViewController.updateTimer(_:)),   
  10.                          userInfo: nil,   
  11.                           repeatstrue)  
  12.       NSRunLoop.currentRunLoop().addTimer(timer, forMode: NSRunLoopCommonModes)  
  13.   
  14.       // 啓動子線程的運行循環  
  15.       /* 
  16.           這句代碼就是一個死循環!如果不停止運行循環,不會執行添加到此句之後的任何代碼 
  17.       */  
  18.       CFRunLoopRun()  
  19.   
  20.       // 停止子線程運行循環之前,不會執行添加到此處的任何代碼  
  21.   }  

  1. var num:Int = 0  
  2.   
  3.   func updateTimer(timer:NSTimer) {  
  4.   
  5.       num  = num + 1  
  6.   
  7.       // 滿足條件後,停止當前的運行循環  
  8.       if (num == 8) {  
  9.   
  10.           // 停止當前的運行循環  
  11.           /* 
  12.               一旦停止了運行循環,後續代碼能夠執行,執行完畢後,線程被自動銷燬 
  13.           */  
  14.           CFRunLoopStop(CFRunLoopGetCurrent())  
  15.       }  
  16.   }  

定時任務

  1. // 延時調用  
  2. /* 
  3.     1.5 秒後自動調用 self 的 hideHUD 方法 
  4. */  
  5. self.performSelector(#selector(NsTimer.hideHUD), withObject: nil, afterDelay1.5)  
  6.   
  7. // 取消延時調用  
  8. NSObject.cancelPreviousPerformRequestsWithTarget(self, selector: #selector(NsTimer.hideHUD), object: nil)  

  1. // 多線程  
  2.   /* 
  3.       1.5 秒後自動執行 block 裏面的代碼 
  4.   */  
  5.   dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(1.5 * Double(NSEC_PER_SEC))), dispatch_get_main_queue()) {  
  6.   
  7.       self.hud.alpha = 0.0;  
  8.   }  

  1. // 定時器  
  2. /* 
  3.     1.5 秒後自動調用 self 的 hideHUD 方法 
  4. */  
  5. NSTimer.scheduledTimerWithTimeInterval(1.5,   
  6.                                 targetself,   
  7.                               selector: #selector(NsTimer.hideHUD),   
  8.                               userInfo: nil,   
  9.                                repeatsfalse
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章