NSTimer學(xué)習(xí)筆記

一、NSTimer認(rèn)識

NSTimer其實是將一個監(jiān)聽加入到系統(tǒng)的RunLoop中去,當(dāng)系統(tǒng)runloop到如何timer條件的循環(huán)時,會調(diào)用timer一次,當(dāng)timer執(zhí)行完,也就是回調(diào)函數(shù)執(zhí)行之后,timer會再一次的將自己加入到runloop中去繼續(xù)監(jiān)聽。

一個timer對象在同一時間只能夠被注冊到一個runloop中,盡管在這個runloop中它能夠被添加到多個runloop模式中去。

二、NSTimer使用

有以下三種初始化方法:

使用scheduledTimerWithTimeInterval: invocation: repeats:或者scheduledTimerWithTimeInterval: target: selector: userInfo: repeats:這兩個類方法創(chuàng)建一個timer并把它指定到一個默認(rèn)的runloop模式中

使用timerWithTimeInterval: invocation: repeats:或者timerWithTimeInterval: target: selector: userInfo: repeats: 這兩個類方法創(chuàng)建一個timer的對象 (當(dāng)創(chuàng)建之后,你必須手動的調(diào)用NSRunLoop下對應(yīng)的方法addTimer:forMode:去將它制定到一個runloop模式中)。

使用initWithFireDate: interval: target: selector: userInfo: repeats: 方法分配并創(chuàng)建一個NSTimer的實例(當(dāng)創(chuàng)建之后,你必須手動的調(diào)用NSRunLoop下對應(yīng)的方法addTimer:forMode:去將它制定到一個runloop模式中)。

[timer?fire];//可以通過fire這個方法去觸發(fā)timer,即使timer的firing?time沒有到達(dá)

注意:不用scheduled方式初始化的,需要手動addTimer: forMode: ?將timer添加到一個runloop中。而scheduled的初始化方法將以默認(rèn)mode直接添加到當(dāng)前的runloop中。

以下是一個采用scheduled的初始化方法的60秒倒計時定時器的初始化:

_countDownTimer= [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timeFireMethod) userInfo:nil repeats:YES];

將計數(shù)器的repeats設(shè)置為YES時,self的引用計數(shù)會加1。因此可能會導(dǎo)致self(即viewController)不能release,所以,必須在viewWillAppear的時候,將計數(shù)器timer停止,否則可能會導(dǎo)致內(nèi)存泄露。

停止的方法為:[self.countDownTimer invalidate];

- (void)invalidate是唯一一個可以將計時器從runloop中移出的方法。

注意:停止timer的運行,一定要將timer賦空,否則還是沒有釋放!

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

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

  • NSTimer是iOS最常用的定時器工具之一,在使用的時候常常會遇到各種各樣的問題,最常見的是內(nèi)存泄漏,通常我們使...
    bomo閱讀 1,257評論 0 7
  • 創(chuàng)建NSTimer 創(chuàng)建NSTimer的常用方法是: + (NSTimer *)scheduledTimerWit...
    LanWor閱讀 1,406評論 0 2
  • 一、什么是NSRunLoop NSRunLoop是消息機(jī)制的處理模式 NSRunLoop的作用在于有事情做的時候使...
    呦釋原點閱讀 679評論 0 2
  • 一、什么是NSRunLoop NSRunLoop是消息機(jī)制的處理模式 NSRunLoop的作用在于有事情做的時候使...
    KK_boy閱讀 523評論 0 0
  • 很喜歡小蝦和教授之間的愛情,也很羨慕,這場隔著海洋隔著國界隔著好多個時區(qū)的愛情,終于穿越人群相見。 看著小蝦在現(xiàn)實...
    桔梗的耿閱讀 289評論 0 0