iOS --三種定時器的用法NSTimer、CADisplayLink术健、GCD

一、NSTimer

1.創(chuàng)建方法

NSTimer*timer = [NSTimerscheduledTimerWithTimeInterval:1.0target:selfselector:@selector(action:) userInfo:nilrepeats:NO];

TimerInterval : 執(zhí)行之前等待的時間粘衬。比如設置成1.0荞估,就代表1秒后執(zhí)行方法

target : 需要執(zhí)行方法的對象。

selector : 需要執(zhí)行的方法

repeats : 是否需要循環(huán)

2.釋放方法

[timerinvalidate];

注意 :調(diào)用創(chuàng)建方法后稚新,target對象的計數(shù)器會加1勘伺,直到執(zhí)行完畢,自動減1褂删。如果是循環(huán)執(zhí)行的話飞醉,就必須手動關閉,否則可以不執(zhí)行釋放方法屯阀。

特性

存在延遲 缅帘,不管是一次性的還是周期性的timer的實際觸發(fā)事件的時間,都會與所加入的RunLoop和RunLoop Mode有關难衰,如果此RunLoop正在執(zhí)行一個連續(xù)性的運算钦无,timer就會被延時出發(fā)。重復性的timer遇到這種情況盖袭,如果延遲超過了一個周期失暂,則會在延時結束后立刻執(zhí)行,并按照之前指定的周期繼續(xù)執(zhí)行鳄虱。

必須加入Runloop

使用上面的創(chuàng)建方式弟塞,會自動把timer加入MainRunloop的NSDefaultRunLoopMode中。如果使用以下方式創(chuàng)建定時器拙已,就必須手動加入Runloop:

NSTimer*timer = [NSTimertimerWithTimeInterval:5target:selfselector:@selector(timerAction) userInfo:nilrepeats:YES];? ? [[NSRunLoopmainRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];

二决记、CADisplayLink

1.創(chuàng)建方法

self.displayLink= [CADisplayLinkdisplayLinkWithTarget:selfselector:@selector(handleDisplayLink:)];? [self.displayLinkaddToRunLoop:[NSRunLoopcurrentRunLoop] forMode:NSDefaultRunLoopMode];

2.停止方法

[self.displayLinkinvalidate];self.displayLink=nil;

當把CADisplayLink對象add到runloop中后,selector就能被周期性調(diào)用倍踪,類似于重復的NSTimer被啟動了系宫;執(zhí)行invalidate操作時,CADisplayLink對象就會從runloop中移除惭适,selector調(diào)用也隨即停止笙瑟,類似于NSTimer的invalidate方法。

特性

屏幕刷新時調(diào)用

CADisplayLink是一個能讓我們以和屏幕刷新率同步的頻率將特定的內(nèi)容畫到屏幕上的定時器類癞志。CADisplayLink以特定模式注冊到runloop后往枷,每當屏幕顯示內(nèi)容刷新結束的時候,runloop就會向CADisplayLink指定的target發(fā)送一次指定的selector消息, CADisplayLink類對應的selector就會被調(diào)用一次错洁。所以通常情況下秉宿,按照iOS設備屏幕的刷新率60次/秒

延遲

iOS設備的屏幕刷新頻率是固定的,CADisplayLink在正常情況下會在每次刷新結束都被調(diào)用屯碴,精確度相當高描睦。但如果調(diào)用的方法比較耗時,超過了屏幕刷新周期导而,就會導致跳過若干次回調(diào)調(diào)用機會忱叭。

如果CPU過于繁忙,無法保證屏幕60次/秒的刷新率今艺,就會導致跳過若干次調(diào)用回調(diào)方法的機會韵丑,跳過次數(shù)取決CPU的忙碌程度。

使用場景

從原理上可以看出虚缎,CADisplayLink適合做界面的不停重繪撵彻,比如視頻播放的時候需要不停地獲取下一幀用于界面渲染。

4.重要屬性

frameInterval

NSInteger類型的值实牡,用來設置間隔多少幀調(diào)用一次selector方法陌僵,默認值是1,即每幀都調(diào)用一次创坞。

duration

readOnly的CFTimeInterval值碗短,表示兩次屏幕刷新之間的時間間隔。需要注意的是摆霉,該屬性在target的selector被首次調(diào)用以后才會被賦值豪椿。selector的調(diào)用間隔時間計算方式是:調(diào)用間隔時間 = duration × frameInterval奔坟。

三携栋、GCD方式

執(zhí)行一次

doubledelayInSeconds =2.0;dispatch_time_tpopTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); dispatch_after(popTime, dispatch_get_main_queue(), ^(void){//執(zhí)行事件});

重復執(zhí)行

NSTimeInterval period = 1.0; //設置時間間隔

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);

dispatch_source_t _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);

dispatch_source_set_timer(_timer, dispatch_walltime(NULL,0), period * NSEC_PER_SEC, 0); //每秒執(zhí)行

dispatch_source_set_event_handler(_timer, ^{

//在這里執(zhí)行事件

});

dispatch_resume(_timer);

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市咳秉,隨后出現(xiàn)的幾起案子婉支,更是在濱河造成了極大的恐慌,老刑警劉巖澜建,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件向挖,死亡現(xiàn)場離奇詭異,居然都是意外死亡炕舵,警方通過查閱死者的電腦和手機何之,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來咽筋,“玉大人溶推,你說我怎么就攤上這事。” “怎么了蒜危?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵虱痕,是天一觀的道長。 經(jīng)常有香客問我辐赞,道長部翘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任响委,我火速辦了婚禮新思,結果婚禮上,老公的妹妹穿的比我還像新娘赘风。我一直安慰自己表牢,他們只是感情好,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布贝次。 她就那樣靜靜地躺著崔兴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蛔翅。 梳的紋絲不亂的頭發(fā)上敲茄,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機與錄音山析,去河邊找鬼堰燎。 笑死,一個胖子當著我的面吹牛笋轨,可吹牛的內(nèi)容都是我干的秆剪。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼爵政,長吁一口氣:“原來是場噩夢啊……” “哼仅讽!你這毒婦竟也來了?” 一聲冷哼從身側響起钾挟,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤洁灵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后掺出,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體徽千,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年汤锨,在試婚紗的時候發(fā)現(xiàn)自己被綠了双抽。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡闲礼,死狀恐怖牍汹,靈堂內(nèi)的尸體忽然破棺而出琅翻,到底是詐尸還是另有隱情,我是刑警寧澤柑贞,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布描函,位于F島的核電站仍翰,受9級特大地震影響膀估,放射性物質(zhì)發(fā)生泄漏撰豺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一有决、第九天 我趴在偏房一處隱蔽的房頂上張望闸拿。 院中可真熱鬧,春花似錦书幕、人聲如沸新荤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽苛骨。三九已至,卻和暖如春苟呐,著一層夾襖步出監(jiān)牢的瞬間痒芝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工牵素, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留严衬,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓笆呆,卻偏偏與公主長得像请琳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子赠幕,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

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