久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    Swift NSTimer 定時器

     昵稱v8JFa 2016-09-25

    前言

        public class NSTimer : NSObject
    • 作用
      • 在指定的時間執行指定的任務。
      • 每隔一段時間執行指定的任務。

    1、定時器的創建

    • 當定時器創建完(不用 scheduled 的,添加到 runloop 中)后,該定時器將在初始化時指定的 ti 秒后自動觸發。

    • scheduled 方式:

      • 創建并啟動定時器。
      • 默認將時鐘以 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(ViewController.updateTimer(_:)), 
                                                              userInfo: nil, 
                                                               repeats: true)
    • timer 方式:

      • 創建定時器,添加到運行循環后啟動定時器。
      • 將時鐘以指定的模式添加到運行循環。

            /*
                + (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti 
                                            target:(id)aTarget 
                                          selector:(SEL)aSelector 
                                          userInfo:(nullable id)userInfo 
                                           repeats:(BOOL)yesOrNo;
        
                - (void)addTimer:(NSTimer *)timer forMode:(NSString *)mode;
        
                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)

    2、定時器的啟動與關閉

        // 啟動定時器
        timer.fireDate = NSDate.distantFuture()
            
        // 暫停定時器
        timer.fireDate = NSDate.distantPast()
            
        // 關閉定時器,永久關閉定時器
        timer.invalidate()

    3、子線程定時器的創建

    • 在子線程創建定時器時,需要手動開啟子線程的運行循環。

          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())
              }
          }

    4、定時任務

    • 1)performSelector

          // 延時調用
          /*
              1.5 秒后自動調用 self 的 hideHUD 方法
          */
          self.performSelector(#selector(NsTimer.hideHUD), withObject: nil, afterDelay: 1.5)
      
          // 取消延時調用
          NSObject.cancelPreviousPerformRequestsWithTarget(self, selector: #selector(NsTimer.hideHUD), object: nil)
    • 2)GCD

          // 多線程
          /*
              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;
          }
    • 3)NSTimer

          // 定時器
          /*
              1.5 秒后自動調用 self 的 hideHUD 方法
          */
          NSTimer.scheduledTimerWithTimeInterval(1.5, 
                                          target: self, 
                                        selector: #selector(NsTimer.hideHUD), 
                                        userInfo: nil, 
                                         repeats: false)

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: A级毛片100部免费看| 国产精品毛片一区二区| 亚洲国产精品福利片在线观看 | 久久精品不卡一区二区| 日本一卡二卡3卡四卡网站精品| 两个人的WWW免费高清视频| 日韩精品中文字幕人妻| 亚洲丰满熟女一区二区蜜桃| 亚洲午夜爱爱香蕉片| 免费VA国产高清大片在线| 99精品国产在热久久婷婷| 亚洲欧美高清在线精品一区二区| 欧产日产国产精品精品| 国产精品亚洲二区在线播放| 亚洲AV无码乱码在线观看性色扶| 国产免费一区二区不卡| 亚洲色偷偷色噜噜狠狠99| 久久综合久中文字幕青草| 国内丰满熟女出轨VIDEOS| 无码激情亚洲一区| 无码AV岛国片在线播放| 高大丰满熟妇丰满的大白屁股| 国产高清不卡一区二区| 精品无码久久久久成人漫画| 国产不卡av一区二区| 美女内射毛片在线看免费人动物| 99久久国产成人免费网站| 人妻少妇不满足中文字幕| 亚洲伊人久久综合影院| 国产一区二区日韩在线| 中文字幕亚洲无线码在线一区 | 国产偷国产偷亚洲清高| 精品国产AV最大网站| 欧美一本大道香蕉综合视频| 无码精品人妻一区二区三区影院 | 久久乐国产精品亚洲综合| 亚洲国产中文字幕精品| 天天摸天天做天天爽2020| 亚洲愉拍一区二区三区| 亚洲V天堂V手机在线| 日韩加勒比一本无码精品|