激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Swift - Swift4使用GCD實(shí)現(xiàn)計(jì)時(shí)器

Swift4使用GCD實(shí)現(xiàn)計(jì)時(shí)器

2021-01-14 18:33AFengM Swift

這篇文章主要為大家詳細(xì)介紹了Swift4使用GCD實(shí)現(xiàn)計(jì)時(shí)器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

開發(fā)過(guò)程中,我們可能會(huì)經(jīng)常使用到計(jì)時(shí)器。蘋果為我們提供了Timer。但是在平時(shí)使用過(guò)程中會(huì)發(fā)現(xiàn)使用Timer會(huì)有許多的不便

1:必須保證在一個(gè)活躍的runloop,我們知道主線程的runloop是活躍的,但是在其他異步線程runloop就需要我們自己去開啟,非常麻煩。
2:Timer的創(chuàng)建和銷毀必須在同一個(gè)線程。跨線程就操作不了
3:內(nèi)存問(wèn)題。可能循環(huán)引用造成內(nèi)存泄露

由于存在上述問(wèn)題,我們可以采用GCD封裝來(lái)解決。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import UIKit
typealias ActionBlock = () -> ()
 
class MRGCDTimer: NSObject {
  
  static let share = MRGCDTimer()
  
  lazy var timerContainer = [String : DispatchSourceTimer]()
  
  
  /// 創(chuàng)建一個(gè)名字為name的定時(shí)
  ///
  /// - Parameters:
  ///  - name: 定時(shí)器的名字
  ///  - timeInterval: 時(shí)間間隔
  ///  - queue: 線程
  ///  - repeats: 是否重復(fù)
  ///  - action: 執(zhí)行的操作
  func scheduledDispatchTimer(withName name:String?, timeInterval:Double, queue:DispatchQueue, repeats:Bool, action:@escaping ActionBlock ) {
    if name == nil {
      return
    }
    var timer = timerContainer[name!]
    if timer==nil {
      timer = DispatchSource.makeTimerSource(flags: [], queue: queue)
      timer?.resume()
      timerContainer[name!] = timer
    }
    timer?.schedule(deadline: .now(), repeating: timeInterval, leeway: .milliseconds(100))
    timer?.setEventHandler(handler: { [weak self] in
      action()
      if repeats==false {
        self?.destoryTimer(withName: name!)
      }
    })
    
  }
  
  
  /// 銷毀名字為name的計(jì)時(shí)器
  ///
  /// - Parameter name: 計(jì)時(shí)器的名字
  func destoryTimer(withName name:String?) {
    let timer = timerContainer[name!]
    if timer == nil {
      return
    }
    timerContainer.removeValue(forKey: name!)
    timer?.cancel()
  }
  
  
  /// 檢測(cè)是否已經(jīng)存在名字為name的計(jì)時(shí)器
  ///
  /// - Parameter name: 計(jì)時(shí)器的名字
  /// - Returns: 返回bool值
  func isExistTimer(withName name:String?) -> Bool {
    if timerContainer[name!] != nil {
      return true
    }
    return false
  }
 
}

使用方法

?
1
2
3
4
MRGCDTimer.share.scheduledDispatchTimer(withName: "name", timeInterval: 1, queue: .main, repeats: true) {
   //code
    self.updateCounter()
 }

取消計(jì)時(shí)器

?
1
MRGCDTimer.share.destoryTimer(withName: "name")

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:https://blog.csdn.net/weixin_42779997/article/details/88173588

延伸 · 閱讀

精彩推薦
  • SwiftSwift的74個(gè)常用內(nèi)置函數(shù)介紹

    Swift的74個(gè)常用內(nèi)置函數(shù)介紹

    這篇文章主要介紹了Swift的74個(gè)常用內(nèi)置函數(shù)介紹,這篇文章列舉出了所有的Swift庫(kù)函數(shù),內(nèi)置函數(shù)是指無(wú)需引入任何模塊即可以直接使用的函數(shù),需要的朋友可...

    Swift教程網(wǎng)5802020-12-19
  • SwiftSwift中轉(zhuǎn)義閉包示例詳解

    Swift中轉(zhuǎn)義閉包示例詳解

    在Swift 中的閉包類似于結(jié)構(gòu)塊,并可以在任何地方調(diào)用,下面這篇文章主要給大家介紹了關(guān)于Swift中轉(zhuǎn)義閉包的相關(guān)資料,需要的朋友可以參考下...

    小小小_小朋友11412021-12-26
  • SwiftSwift能代替Objective-C嗎?

    Swift能代替Objective-C嗎?

    這是我在網(wǎng)上上看到的答案,復(fù)制粘貼過(guò)來(lái)和大家分享一下,因?yàn)槲液秃芏嗳艘粯雍荜P(guān)心Swift的出現(xiàn)對(duì)Mac開發(fā)的影響和對(duì)Objective-C的影響。...

    Swift教程網(wǎng)4412020-12-16
  • Swiftswift where與匹配模式的實(shí)例詳解

    swift where與匹配模式的實(shí)例詳解

    這篇文章主要介紹了swift where與匹配模式的實(shí)例詳解的相關(guān)資料,這里附有簡(jiǎn)單的示例代碼,講的比較清楚,需要的朋友可以參考下...

    追到夢(mèng)的魔術(shù)師14382021-01-06
  • SwiftSwift教程之基礎(chǔ)數(shù)據(jù)類型詳解

    Swift教程之基礎(chǔ)數(shù)據(jù)類型詳解

    這篇文章主要介紹了Swift教程之基礎(chǔ)數(shù)據(jù)類型詳解,本文詳細(xì)講解了Swift中的基本數(shù)據(jù)類型和基本語(yǔ)法,例如常量和變量、注釋、分號(hào)、整數(shù)、數(shù)值類型轉(zhuǎn)換等...

    Swift教程網(wǎng)5162020-12-18
  • SwiftSwift實(shí)現(xiàn)多個(gè)TableView側(cè)滑與切換效果

    Swift實(shí)現(xiàn)多個(gè)TableView側(cè)滑與切換效果

    這篇文章主要為大家詳細(xì)介紹了Swift實(shí)現(xiàn)多個(gè)TableView側(cè)滑與切換效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下...

    乞力馬扎羅的雪雪5822021-01-08
  • SwiftSwift使用CollectionView實(shí)現(xiàn)廣告欄滑動(dòng)效果

    Swift使用CollectionView實(shí)現(xiàn)廣告欄滑動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了Swift使用CollectionView實(shí)現(xiàn)廣告欄滑動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下...

    Stevin的技術(shù)博客12372021-01-13
  • Swiftmac git xcrun error active developer path 錯(cuò)誤

    mac git xcrun error active developer path 錯(cuò)誤

    本文主要是講訴了如何解決在mac下使用git;xcode4.6的環(huán)境時(shí),出現(xiàn)了錯(cuò)誤(mac git xcrun error active developer path)的解決辦法,希望對(duì)大家有所幫助...

    Swift教程網(wǎng)2232020-12-16
主站蜘蛛池模板: 久久久久免费精品国产小说色大师 | 国产免费观看视频 | 美女毛片在线观看 | 日韩黄站 | 精品国产一区二区三区久久久蜜 | 日本在线播放一区二区三区 | 欧美日韩成人一区二区 | 欧美综合成人 | 欧美视频首页 | 久久99精品久久久久久久久久久久 | 免费国产成人高清在线看软件 | 亚洲成人国产综合 | 美女黄页网站免费进入 | 精品国产91久久久久久 | 国产精品久久国产精品 | 婷婷亚洲一区二区三区 | 中国大陆一级毛片 | 久久艳片 | 国产一区二区三区网站 | 国产午夜免费视频 | 亚洲综合精品 | 亚洲成人福利在线 | 性爱在线免费视频 | 黄色毛片前黄 | 粉嫩一区| 精品国产一区二区三区四区阿崩 | 欧美视频一二三区 | 最新中文字幕在线视频 | 一级外国毛片 | 日日艹夜夜艹 | 理论片中文字幕 | 久久精品一区二区三区国产主播 | 九一看片.| 超久久 | 美女在线观看视频一区二区 | 羞羞视频免费观看入口 | 国产欧美日韩在线不卡第一页 | 性盈盈盈影院 | 久久久国产视频 | 999精品国产 | 欧美一区二区黄色 |