NSTimer 是一個(gè)定時(shí)器,可以完成任何定時(shí)功能;
NSTimer不是絕對(duì)精確的,中間耗時(shí)或阻塞錯(cuò)過(guò)下一個(gè)點(diǎn),那么下一個(gè)點(diǎn)就pass過(guò)去了,Timer可以精確到50-100毫秒
初始化
+ (NSTimer *)scheduledTimerWithTimerInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;
//scheduled方法會(huì)將Timer默認(rèn)添加到當(dāng)前runloop中,如果不用scheduled方法,我們需要手動(dòng)addTimer:forMode: 將timer添加到一個(gè)runloop中。
// TimeInterval:
// 表示輸入一個(gè)時(shí)間間隔,CGFloat,以秒為單位
// target:
// 表示發(fā)送的對(duì)象
// selector:
// 方法選擇器
// userInfo:
// 此參數(shù)可以為nil,當(dāng)定時(shí)器失效時(shí),由你指定的對(duì)象保留和釋放該定時(shí)器
// repeats:
// 當(dāng)YES時(shí),定時(shí)器會(huì)自動(dòng)循環(huán)直到失效或被釋放,當(dāng)NO時(shí),只會(huì)執(zhí)行一次方法
NSTimer初始化中設(shè)為target的對(duì)象將被強(qiáng)引用一次,所以一般需要在viewWillDisappear等方法中[timer invalidate]將timer無(wú)效化,并賦空
啟動(dòng)Timer
- (void)fire;
// 這個(gè)方法是立即執(zhí)行一次Timer中的方法,實(shí)際上當(dāng)我們初始化了一個(gè)timer后,會(huì)在指定的timerInteval秒后自動(dòng)觸發(fā)
// 在重復(fù)執(zhí)行的定時(shí)器中調(diào)用此方法后立即觸發(fā)該定時(shí)器,但不會(huì)中斷其之前的執(zhí)行計(jì)劃;
// 在不重復(fù)執(zhí)行的定時(shí)器中調(diào)用此方法,立即觸發(fā)后,就會(huì)使這個(gè)定時(shí)器失效。
停止Timer
-(void)invalidate;
//用此方法停止之后要將timer賦空(timer = nil)
// 這是唯一一個(gè)可以將計(jì)時(shí)器從runloop中移出的方法。
注:
如果我們需要自定義一個(gè)計(jì)時(shí)器,注意不可以設(shè)為NSTimer的子類,因?yàn)镹STimer是一個(gè)虛類,其方法實(shí)現(xiàn)都是在其子類相應(yīng)中實(shí)現(xiàn)的,所以如果我們自定義NSTimer的子類,在重寫方法中寫[super init....]等實(shí)現(xiàn)時(shí)會(huì)報(bào)錯(cuò),因?yàn)镹STimer中根本沒(méi)有對(duì)應(yīng)方法的實(shí)現(xiàn)
參考資料以及擴(kuò)展:一個(gè)可以暫停和重啟的定時(shí)器分類
http://blog.csdn.net/samuelltk/article/details/7484533
博主:藍(lán)天客