iOS中的几种timer比较

工作需要,粗略了解了ios上的几种定时器。

NSTimer:

           这个底层怎么定时我不清楚,应该是到了一定时间之后,向runLoop添加一个事件,这也就意味着,如果想在异步线程开启timer ,就需要手动的将timer 添加到runLoop中,并且run起来。

           网上看了一些说的精确度,不是明白,亲测过,子线程创建一个timer,runLoop run起来,只要timer里面的事件,不超过timer定时的时间,timer定时还是很准确的,所以如果项目需要,timer里面的执行事件的时间超过了定时器的时间,就会出问题了(试想一下,即使把事件再拿到另外一个线程去执行,执行时间永远都是大于定时时间的,即使不影响定时时间,那么事件处理的堆积事件就会越来越多,肯定无法满足需求,所以最好的是,将事件拆分,做成多个管道,多个定时器,定时器时间大于处理定时器事件的时间)。我们通常说的timer会出问题,我猜想可能是在主线程定义了一个timer,runloop执行一个耗时很长的循环,错过了timer的周期,这肯定会出问题,还有就是timer里面的事件处理时间不够也会出问题。所以我的解决办法是,子线程runLoop run起来,保持线程,同时保证timer里面的事件处理时间不超过timer时间,这样就ok了。

          综上所诉,用处理一般的事件完全足够,只是使用中需要注意。


CADisplayLink:

          这个是根据屏幕的帧率来发送事件,也依赖于runLoop,也就是说,我们只能控制多少帧,触发我们定义的事件,可用于界面的刷新,不能随心所欲的控制时间,不满足我们一般的需求。使用也很简单,自行看API


GCD的source timer:

      个人觉得这是比较给力(原谅我词汇的匮乏)的一个定时器了。原因如下,它不依赖于runLoop,底层两个队列,一个事件队列,一个任务队列,定时到了之后,从任务队列里取出事件,加入到事件队列(之前还有一步,向任务队列push任务),执行事件,至于他的一直执行(为什么不依赖于runLoop,这于GCD的底层实现有关,有兴趣可以自行了解),放到一个子线程执行(想在主线程执行的,可以用mainQUeue包一层),在子线程的执行顺序也是串行的,所以如果block的执行事件时间大于定时时间,还是会阻塞,可以一定层度上解决,请看下面代

可以在block块里再用一个队列,异步执行,包起来,但是我们看一下执行结果


确实,执行事件表面看并没有影响定时器的定时,但是注意看始终都是系统分配的几个线程去执行事件,也就是说这几个线程是重复利用的,当第一次使用完,第二次使用的时候,定时并不准确(可能是线程清理需要事件,具体不清楚),还有定时器的定时还是不准确,这可能就跟GCDSource内部实现有关系了,所以不推荐这样使用,目前我个人的想法就是,如果事件处理时间过长,要吗想办法拆分事件,加管道,加定时器,要吗延长定时时间。

与timer相比,的优势就是,不需要维持runLoop,(性能消耗上或许有区别,没有实际看过),还有本身就是子线程去执行的,不会阻塞主线程。


以上只是我个人的想法和总结,肯定有说得不对的地方,希望多讨论,多批评指正。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容