定時器NSTimer用法

創(chuàng)建一個NSTimer驰凛,有多種方法孝情,如

scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:
timerWithTimeInterval:target:selector:userInfo:repeats:

等等
其中,用不帶有scheduled的洒嗤,在初始化了后箫荡,還需要調(diào)用
addTimer:forMode:方法,將Timer加入到runloop中渔隶。


參數(shù):

  1. seconds定時時間
  2. target發(fā)送對象
  3. aSelector定時器啟動調(diào)用的方法
  4. userInfo可為nil羔挡,使用者的信息
  5. repeats定時器是否循環(huán)

在Timer添加到runloop后洁奈,定時器立刻啟動,在seconds時間后绞灼,調(diào)用aSelector方法利术,如果最開始時不想等seconds時間,可調(diào)用-fire方法低矮,立刻調(diào)用aSelector方法印叁。


-invalidate方法可使定時器失效。

注意:

  • 使用-invalidate方法后军掂,即使再次使用-fire方法也不會讓定時器再次工作轮蜕,因為-invalidate方法是使Timer失效。
  • 暫停定時器:可使用[self setFireDate:[NSDate distantFuture]];方法:即將定時器啟動時間設(shè)為無窮遠
    恢復(fù)定時器蝗锥,使用[self setFireDate:[NSDate date]];方法:即將定時器啟動時間設(shè)為現(xiàn)在的時刻跃洛。
  • 對于需要在暫停時刻改變定時時間間隔的情況,則需要重新創(chuàng)建NSTImer终议,啟動汇竭,通過-invalidate停止定時器。

NSTimer 內(nèi)存泄漏解決方法

由于 NSTimer 容易與持有它的對象互相引用穴张,從而導(dǎo)致內(nèi)存泄漏细燎,因此在使用時需要格外注意。 iOS 10.0 以后已經(jīng)有了 scheduledTimer(withTimeInterval:repeats:block:) 方法解決內(nèi)存泄漏問題皂甘,但是 iOS 10.0 以前還需要自己想辦法玻驻。

  1. 如果 timerWithTimeInterval:target:selector:userInfo:repeats: 中傳給 target 的為 weakSelf 是否可以?
    不可以叮贩。因為 Timer 對 target 強引用击狮,強引用一個 weak 變量,對變量所指的對象仍然是強引用
  2. 借鑒參考 1 中第 52 條的方法解決該問題益老。
extension Timer {
    class func njyScheduledTimer(timerInterval: TimeInterval, block: @escaping () -> Void, repeats: Bool) -> Timer {
        return Timer.scheduledTimer(timeInterval: timerInterval, target: self, selector: #selector(njyBlockInvoke(timer:)), userInfo: [block copy], repeats: repeats)
    }

    @objc class func njyBlockInvoke(timer: Timer) {
        let block = timer.userInfo as? () -> Void
        if let block = block {
            block()
        }
    }
}

注意:在實際使用時彪蓬,仍然要注意內(nèi)存泄漏的問題,因此需要使用 weak var weakSelf = selflet strongSelf = weakSelf 打破保留環(huán)捺萌,解決內(nèi)存泄漏的問題档冬。

參考

  1. Effective Objective-C 2.0
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市桃纯,隨后出現(xiàn)的幾起案子酷誓,更是在濱河造成了極大的恐慌,老刑警劉巖态坦,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盐数,死亡現(xiàn)場離奇詭異,居然都是意外死亡伞梯,警方通過查閱死者的電腦和手機玫氢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門帚屉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人漾峡,你說我怎么就攤上這事攻旦。” “怎么了生逸?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵牢屋,是天一觀的道長。 經(jīng)常有香客問我槽袄,道長烙无,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任掰伸,我火速辦了婚禮皱炉,結(jié)果婚禮上怀估,老公的妹妹穿的比我還像新娘狮鸭。我一直安慰自己,他們只是感情好多搀,可當(dāng)我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布歧蕉。 她就那樣靜靜地躺著,像睡著了一般康铭。 火紅的嫁衣襯著肌膚如雪惯退。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天从藤,我揣著相機與錄音催跪,去河邊找鬼。 笑死夷野,一個胖子當(dāng)著我的面吹牛懊蒸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播悯搔,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼骑丸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了妒貌?” 一聲冷哼從身側(cè)響起通危,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎灌曙,沒想到半個月后菊碟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡在刺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年逆害,在試婚紗的時候發(fā)現(xiàn)自己被綠了藏古。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡忍燥,死狀恐怖拧晕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情梅垄,我是刑警寧澤厂捞,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站队丝,受9級特大地震影響靡馁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜机久,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一臭墨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧膘盖,春花似錦胧弛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至软棺,卻和暖如春红竭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背喘落。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瘦棋,地道東北人稀火。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像兽狭,于是被迫代替她去往敵國和親憾股。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,860評論 2 361

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