欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

iOS中的3種定時(shí)器匯總介紹

 更新時(shí)間:2023年05月11日 08:14:54   作者:滴水微瀾  
這篇文章主要介紹了iOS中的3種定時(shí)器匯總介紹的相關(guān)資料,需要的朋友可以參考下

在iOS中有3種常見(jiàn)的定時(shí)器,它們會(huì)根據(jù)不同的場(chǎng)景進(jìn)行選擇使用。

1.DispatchSourceTimer: 基于GCD實(shí)現(xiàn)。

2.CADisplayLink:基于屏幕刷新實(shí)現(xiàn)。

3.Timer:基于RunLoop實(shí)現(xiàn)。

DispatchSourceTimer定時(shí)器

DispatchSourceTimer定時(shí)器可以通過(guò)DispatchSource.makeTimerSource(queue: DispatchQueue.main)方法來(lái)創(chuàng)建,并且

使用GCD創(chuàng)建了一個(gè)DispatchSource類型的定時(shí)器,并使用全局隊(duì)列來(lái)運(yùn)行它。通過(guò)schedule(deadline: .now(), repeating: .seconds(1))方法指定定時(shí)器的初始延遲和重復(fù)時(shí)間,然后設(shè)置了一個(gè)事件處理程序來(lái)定義定時(shí)器要執(zhí)行的操作。

最后timer.resume()啟動(dòng)定時(shí)器。

要停止定時(shí)器,可以調(diào)用timer.cancel()方法。

優(yōu)點(diǎn)為:Dispatch定時(shí)器非常輕量級(jí),基于GCD的實(shí)現(xiàn),可以利用GCD的優(yōu)勢(shì)來(lái)進(jìn)行任務(wù)調(diào)度,性能高。

var timer: DispatchSourceTimer?
func startCountdown() {
    //一般倒計(jì)時(shí)是操作UI,使用主隊(duì)列
    timer = DispatchSource.makeTimerSource(queue: DispatchQueue.main)
    // //耗時(shí)操作放在全局隊(duì)列,子線程處理
    // timer = DispatchSource.makeTimerSource(queue: DispatchQueue.global())
    timer.schedule(deadline: .now(), repeating: .seconds(1))
    timer.setEventHandler {
        // 定時(shí)器執(zhí)行的操作
    }
    timer.resume()
}
deinit {
    timer.cancel()
    timer = nil
}

CADisplayLink定時(shí)器

CADisplayLink定時(shí)器可以通過(guò)CADisplayLink(target: self, selector: #selector(update))方法創(chuàng)建,并且通過(guò)displayLink.add(to: .main, forMode: .common)方法將定時(shí)器添加到主運(yùn)行循環(huán)中,并指定了運(yùn)行模式。

然后定義update方法,該方法將在每個(gè)定時(shí)器周期中執(zhí)行。

在對(duì)象銷毀前停止定時(shí)器,可以調(diào)用displayLink.invalidate()方法。

CADisplayLink對(duì)象一旦創(chuàng)建就會(huì)運(yùn)行,比較適合監(jiān)控主線程UI卡頓,用做倒計(jì)時(shí)不如使用DispatchSourceTimer

它是和屏幕刷新率同步,優(yōu)點(diǎn)在于精確度高,適用于需要頻繁更新UI的場(chǎng)景。

var displayLink: CADisplayLink?
func startCountdown() {
    //一般倒計(jì)時(shí)是操作UI,使用主隊(duì)列
    let displayLink = CADisplayLink(target: self, selector: #selector(update))
    //設(shè)置多長(zhǎng)時(shí)間回調(diào)一次,默認(rèn)每次刷新都會(huì)調(diào)用,大概60ps, 這里設(shè)置1表示1s調(diào)用一次
    displayLink.preferredFramesPerSecond = 1
    displayLink.add(to: .main, forMode: .common)
}
@objc func update() {
    // 定時(shí)器執(zhí)行的操作
}
deinit {
    displayLink.invalidate()
    displayLink = nil
}

Timer定時(shí)器

Timer定時(shí)器可以使用Timer.scheduledTimer方法創(chuàng)建,然后指定重復(fù)間隔和一個(gè)閉包作為定時(shí)器要執(zhí)行的操作。并且將返回的定時(shí)器對(duì)象存儲(chǔ)在變量timer中。

要停止定時(shí)器,可以調(diào)用timer.invalidate()方法。

Timer是一個(gè)簡(jiǎn)單的定時(shí)器,基于RunLoop的,通常用于實(shí)現(xiàn)對(duì)實(shí)時(shí)性要求不高的場(chǎng)合,因?yàn)樗蛔?cè)在runloop的timers事件源集合中,如果當(dāng)前runloop執(zhí)行耗時(shí)任務(wù)超過(guò)了調(diào)用時(shí)間,那么就會(huì)丟棄當(dāng)前次,直接執(zhí)行下一次。導(dǎo)致定時(shí)器不準(zhǔn)時(shí)的情況。

var timer: Timer?
func startCountdown() {
    //一般倒計(jì)時(shí)是操作UI,使用主隊(duì)列
    timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { timer in
    // 定時(shí)器執(zhí)行的操作
    }
}
deinit {
    timer.invalidate()
    timer = nil
}

到此這篇關(guān)于iOS中的3種定時(shí)器匯總介紹的文章就介紹到這了,更多相關(guān)iOS中的3種定時(shí)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • IOS獲取指定年月的當(dāng)月天數(shù)

    IOS獲取指定年月的當(dāng)月天數(shù)

    本文通過(guò)實(shí)例演示在IOS開(kāi)發(fā)中如何獲取指定年月的當(dāng)月天數(shù),有需要的小伙伴們可以參考借鑒。
    2016-08-08
  • iOS中利用CAEmitterLayer實(shí)現(xiàn)粒子動(dòng)畫詳解

    iOS中利用CAEmitterLayer實(shí)現(xiàn)粒子動(dòng)畫詳解

    粒子效果應(yīng)該對(duì)現(xiàn)在很多人來(lái)說(shuō)并不陌生,我們之前也分享了一些相關(guān)文章,下面這篇文章主要給大家介紹了關(guān)于iOS中利用CAEmitterLayer實(shí)現(xiàn)粒子動(dòng)畫的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友們下面來(lái)一起看看吧。
    2017-06-06
  • iOS 增加右側(cè)按鈕功能實(shí)例代碼

    iOS 增加右側(cè)按鈕功能實(shí)例代碼

    這篇文章主要介紹了iOS 增加右側(cè)按鈕功能實(shí)例代碼,需要的朋友可以參考下
    2017-07-07
  • iOS 加載Bundle文件的實(shí)例代碼

    iOS 加載Bundle文件的實(shí)例代碼

    這篇文章主要介紹了iOS 加載Bundle文件的實(shí)例代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),需要的朋友參考下
    2016-12-12
  • iOS App開(kāi)發(fā)中Core Data框架基本的數(shù)據(jù)管理功能小結(jié)

    iOS App開(kāi)發(fā)中Core Data框架基本的數(shù)據(jù)管理功能小結(jié)

    除了使用SQL關(guān)系型數(shù)據(jù)庫(kù),我們還可以使用Xcode中提供的Core Data來(lái)進(jìn)行表結(jié)構(gòu)數(shù)據(jù)處理,這里我們就來(lái)初步整理iOS App開(kāi)發(fā)中Core Data框架基本的數(shù)據(jù)管理功能小結(jié):
    2016-06-06
  • iOS實(shí)現(xiàn)簡(jiǎn)易鐘表

    iOS實(shí)現(xiàn)簡(jiǎn)易鐘表

    這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)簡(jiǎn)易鐘表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • iOS中鍵盤 KeyBoard 上添加工具欄的方法

    iOS中鍵盤 KeyBoard 上添加工具欄的方法

    大iOS中 鍵盤 KeyBoard 上怎么添加工具欄呢?大致思路是提前創(chuàng)建好工具欄,在鍵盤彈出的時(shí)候?qū)⒐ぞ邫陲@示出來(lái),在鍵盤消失的時(shí)候讓工具欄隱藏。具體實(shí)現(xiàn)代碼大家參考下本文吧
    2017-08-08
  • iOS 懶加載的使用實(shí)例代碼

    iOS 懶加載的使用實(shí)例代碼

    本篇文章主要介紹了iOS 懶加載的使用實(shí)例代碼,詳細(xì)的介紹了什么是懶加載和優(yōu)點(diǎn),及其實(shí)例。有興趣的可以了解一下
    2017-05-05
  • iOS去除圖片背景顏色的方法

    iOS去除圖片背景顏色的方法

    本篇文章給大家分享一下iOS去除圖片中指定范圍內(nèi)顏色的三種方式,需要的朋友參考學(xué)習(xí)下吧。
    2017-12-12
  • 詳解iOS通過(guò)ASIHTTPRequest提交JSON數(shù)據(jù)

    詳解iOS通過(guò)ASIHTTPRequest提交JSON數(shù)據(jù)

    這篇文章主要介紹了詳解iOS通過(guò)ASIHTTPRequest提交JSON數(shù)據(jù),對(duì)代碼進(jìn)行了詳細(xì)的講解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2016-12-12

最新評(píng)論