swift3.0下的NSTimer和GCD

基于其他高級(jí)語(yǔ)言(如java),swift3.0對(duì)OC中的許多類(lèi)名進(jìn)行了省略,如CGFloat變成Float,NSURL變成了URL,NSURLRequest變成URLRequest,NSTimer變成了Timer,dipatch_time_t變成DispatchQueue......如此的調(diào)整,個(gè)人推測(cè)是為了增加Swift的應(yīng)用范圍(傳言的swift開(kāi)發(fā)有機(jī)會(huì)晉升為全棧工程師也并非沒(méi)有可能).前途是光明的,道路的曲折卻需要填很多坑.下面記錄一下工程在向Swift3.0遷移的過(guò)程中,遇到的NSTimer和GCD應(yīng)用的問(wèn)題
1Timer的啟用和暫停
在UIView的子類(lèi),如UITableViewCell中,可以用懶加載的方式創(chuàng)建Timer:

lazy var timer: Timer = Timer.scheduledTimer(timeInterval: homeRefreshInterval, target: self, selector: #selector(timerFire), userInfo: nil, repeats: true)

啟用和暫停如下:

//啟用
cellTimer?.fireDate = NSDate.distantPast
//暫停
cellTimer?.fireDate = NSDate.distantFuture

而在UIViewController的子類(lèi)中,用懶加載的方式創(chuàng)建Timer時(shí),會(huì)導(dǎo)致通不過(guò)編譯(推測(cè)原因需要保證在主線程創(chuàng)建View頁(yè)面完成后,才可以使用Timer).一般實(shí)現(xiàn)方式如下:

var timer: Timer?
    override func viewDidLoad() {
        super.viewDidLoad()
        self.timer = Timer.scheduledTimer(timeInterval: refreshTimeInterval, target: self, selector: #selector(loadData), userInfo: nil, repeats: true)
    }
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        timer?.fireDate = NSDate.distantPast
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        timer?.fireDate = NSDate.distantFuture
    }

2GCD實(shí)現(xiàn)延遲

//延遲后在主線程刷新UI
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1)) {
                self.aIV.stopAnimating()
                self.navigationItem.rightBarButtonItem = self.refreshImage
            }

在stackOverFlow中看到的使用方式如下:

    var mDispatchQuquq: DispatchQueue?
    var mDispatchWorkItem: DispatchWorkItem?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.mDispatchQuquq = DispatchQueue.global(qos: .background)// create Dispatch queue
        self.mDispatchWorkItem = DispatchWorkItem {//ceate dispatch item
            // TO DO... asinc code
            print("uptimeNanoseconds")
        }
        if self.mDispatchWorkItem != nil {
            // launcher .asyncAfter
            self.mDispatchQuquq?.asyncAfter(deadline:  .now() + .seconds(3),
                                            execute: self.mDispatchWorkItem!)
        }
    }

swift3.0對(duì)類(lèi)名的變化的同時(shí),伴隨著使用方式的改變,使用的過(guò)程中免不了看官方文檔,查看StackOverFlow等論壇.相信以后問(wèn)題還有很多,但同時(shí)也意味著解決問(wèn)題之后的進(jìn)步,加油!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 因?yàn)橐Y(jié)局swift3.0中引用snapKit的問(wèn)題,看到一篇介紹Xcode8,swift3變化的文章,覺(jué)得很詳細(xì)...
    uniapp閱讀 4,537評(píng)論 0 12
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,257評(píng)論 4 61
  • 左冷琴走那天,天很熱。遠(yuǎn)處鐵軌上方蒸騰著的熱浪把景物變得扭曲。左冷琴接過(guò)行李箱,說(shuō),你回去吧。聲音輕到?jīng)]來(lái)及聽(tīng)清就...
    王野寇閱讀 311評(píng)論 2 1
  • 程序題: 如下代碼會(huì)如何進(jìn)行輸出: 輸出: 結(jié)果出乎我的意料, 起因: 第一次異常信息: 第一次bugfix: 無(wú)...
    聚變閱讀 2,641評(píng)論 0 0
  • 計(jì)算圖的構(gòu)建 Tensorflow首先定義計(jì)算(計(jì)算圖),也就是變量相乘,相加,相加,相減(矩陣,向量,標(biāo)量) 定...
    dreamsfuture閱讀 781評(píng)論 0 1