NSTimer 總結1(包括計時器不準的解決)

記得自己剛接觸nstimer時,以為就是個定時循環(huán)執(zhí)行某方法的計時器,然而之后遇到過各種問題,最近發(fā)現問的最多的就是頁面滑動時計時器不準的情況,下邊我總結一下自己長久以來收集到的信息.

1.基礎使用方法

非新手請自動濾過

 /* NSTimer計時器類    
 TimeInterval:設定執(zhí)行時間    
 target:目標    
 @selector:方法(也就是目標(target)的行為(selector))  
 userInfo:用于向selector方法中傳參數,  一般是self
 repeats:是否重復
     */
NSTimer * timer = [NSTimer scheduledTimerWithTimeInterval:.9 target:self selector:@selector(changeColor:) userInfo:view4 repeats:YES];    
[timer fire];//開始執(zhí)行

//計時器執(zhí)行的方法,sender 就是對應的計時器(那個計時器調的我)
- (void)changeColor:(NSTimer *)sender
{    
//sender計時器對象,通過.userinfo屬性就能拿到當初傳來的參數(id類型),
對于此題上面穿的是一個view對象,所以直接用UIview類型接收   
 UIView * vie = sender.userInfo;   
 //修改傳入視圖的背景色   
 vie.backgroundColor = [UIColor colorWithRed:arc4random() % 256 / 255.0 green:arc4random() % 256 / 255.0 blue:arc4random() % 256 / 255.0 alpha:1.0];
}

2.開始和暫停

NSTimer 是木有暫停繼續(xù)的方法的,只有fire和invalidate,前者是開工的意思啡邑,后者是廢掉的意思番川,如果用廢掉來代替暫停的功能船庇?顯然是不對的鞭盟。

那腫么辦呢赊颠?
其實NSTimer 有一個屬性叫 fireDate 格二,啥意思呢?fireDate么竣蹦,就是fire 的開始時間所以我們就有了思路了顶猜。

暫停: [timer setFireDate:[NSDate distantFuture]]; distantFuture,就是問你未來有多遠呢草添?好遠好遠就是無法到達的時間驶兜,所以 timer就一直等待不 fire了。也就是暫停了远寸。

繼續(xù): [timer setFireDate:[NSDate date]]; 這個當然就是把fire 的時間設置為當前時刻抄淑,所以timer就立刻開工啦!

3.解決滑動頁面計時器不準情況

 + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;

在做界面滑動等操作時,計時器會不準

導致誤差的原因是我在使用“scheduledTimerWithTimeInterval”方法時驰后,NSTimer實例是被加到當前runloop中的肆资,模式是NSDefaultRunLoopMode。而“當前runloop”就是應用程序的main runloop灶芝,此main runloop負責了所有的主線程事件郑原,這其中包括了UI界面的各種事件。當主線程中進行復雜的運算夜涕,或者進行UI界面操作時犯犁,由于在main runloop中NSTimer是同步交付的被“阻塞”,而模式也有可能會改變女器。因此酸役,就會導致NSTimer計時出現延誤。

解決這種誤差的方法,一種是在子線程中進行NSTimer的操作涣澡,再在主線程中修改UI界面顯示操作結果贱呐;另一種是仍然在主線程中進行NSTimer操作,但是將NSTimer實例加到main runloop的特定mode(模式)中入桂。避免被復雜運算操作或者UI界面刷新所干擾奄薇。
這里我經常用的是他:

[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];

[NSRunLoop currentRunLoop]獲取的就是“main runloop”,使用NSRunLoopCommonModes模式抗愁,將NSTimer加入其中馁蒂。其他方法后續(xù)再補充.
比如我在自己寫的倒計時中就用到了這句:http://www.reibang.com/p/6ce30bd28fe7
關于runloop就比較高端了,我捉摸透了希望也可以總結下
未完待續(xù)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市驹愚,隨后出現的幾起案子远搪,更是在濱河造成了極大的恐慌劣纲,老刑警劉巖逢捺,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異癞季,居然都是意外死亡劫瞳,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門绷柒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來志于,“玉大人,你說我怎么就攤上這事废睦∷耪溃” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵嗜湃,是天一觀的道長奈应。 經常有香客問我,道長购披,這世上最難降的妖魔是什么杖挣? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮刚陡,結果婚禮上惩妇,老公的妹妹穿的比我還像新娘。我一直安慰自己筐乳,他們只是感情好歌殃,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蝙云,像睡著了一般氓皱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贮懈,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天匀泊,我揣著相機與錄音优训,去河邊找鬼。 笑死各聘,一個胖子當著我的面吹牛揣非,可吹牛的內容都是我干的。 我是一名探鬼主播躲因,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼早敬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了大脉?” 一聲冷哼從身側響起搞监,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎镰矿,沒想到半個月后琐驴,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡秤标,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年绝淡,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苍姜。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡牢酵,死狀恐怖,靈堂內的尸體忽然破棺而出衙猪,到底是詐尸還是另有隱情馍乙,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布垫释,位于F島的核電站丝格,受9級特大地震影響,放射性物質發(fā)生泄漏饶号。R本人自食惡果不足惜铁追,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望茫船。 院中可真熱鬧琅束,春花似錦、人聲如沸算谈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽然眼。三九已至艾船,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背屿岂。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工践宴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人爷怀。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓阻肩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親运授。 傳聞我的和親對象是個殘疾皇子烤惊,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內容

  • Run loop 剖析:Runloop 接收的輸入事件來自兩種不同的源:輸入源(intput source)和定時...
    Mitchell閱讀 12,438評論 17 111
  • 前言 最近離職了,可以盡情熬夜寫點總結,不用擔心第二天上班爽并蛋疼著吁朦,這篇的主角 RunLoop 一座大山柒室,涵蓋的...
    zerocc2014閱讀 12,378評論 13 67
  • 之前要做一個發(fā)送短信驗證碼的倒計時功能,打算用NSTimer來實現逗宜,做的過程中發(fā)現坑還是有不少的雄右。 基本使用 NS...
    WeiHing閱讀 4,386評論 1 8
  • 轉載:http://www.cocoachina.com/ios/20150601/11970.html RunL...
    Gatling閱讀 1,441評論 0 13
  • 很久沒有開口說整串整串的英語句子,一直以為自己的功底還在锦溪,但是這兩天的練習真的大大的打擊了我不脯。在模仿的過程中府怯,最大...
    波西米婭閱讀 143評論 0 0