iOS中的定时器 - NSTimer、CADisplayLink、dispatch_source ---- 其一(NSTimer - 逐步完善中……)

定时器大家经常使用,今天我们扒一扒 定时器 那些事!!

从题目可以看出,定时器有三个,相对于熟知的是第一个: NSTimer

NSTimer 介绍

NSTimer是经常使用的定时器,基本属于随手创建使用的,极大的方便了开发中的一些特殊需求,但是它的坑也不少,先说一下它的基本用法:

创建方法

NSTimer *time = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerSelector:) userInfo:@"123" repeats:YES];

timerWithTimeInterval这两个类方法创建出来的对象如果不用 addTimer: forMode方法   手动加入主循环池中,将不会循环执行。并且如果不手动调用fair,则定时器不会启动。

  • TimerIntval:执行之前等待的时间.比如设置成1.0 就代表1秒后执行;
  • target:需要执行方法的对象;
  • selector:需要执行的方法;
  • repeats:是否需要循环;

释放方法

[timer invalidate];

特性

  • 存在延迟:不管是一次性还是周期性的timer的实际触发事件的时间,都会与所加入的RunLoop和RunLoopMode有关.如果RunLoop正在执行一个连续的运算,timer就会被延迟触发。重复性的timer(repeats = yes)遇到这种情况,如果延迟超过一个周期,则会和后面的触发进行合并,即在一个周期内只会触发一次。但是不管该timer的触发时间延迟的有多离谱,后面的timer的触发时间总是倍数于第一次添加timer的间隙。

  • 创建方式第二种 : 如果用以下方式创建,必须加入RunLoop

NSTimer *timer = [NSTimer timerWithTimeInterval:5 target:self seletor:@selector(timerAction) userInfo:nil repeats:YES];

[[NSRunloop mainRunloop] addTimer:timer forMode:NSDefaultRunloopMode];

注意 :下面这种创建方式,也就是第一种,并不是不需要添加的RunLoop中,而是自动会添加到 MainRunLoop 中的 NSDefaultRunLoopMode 的模式中!!

NSTimer *time = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerSelector:) userInfo:@"666" repeats:YES];

以上是NSTimer 的创建方式,基本是两种常用的,还有一个小的注意点,就是RunLoop, 以下我们来说一些不是常用的:

  • 需求 : 直播界面中的直播时长,基本作用 : 显示了主播的直播时长,但是,如果APP进入后台,或者电话来了,这个时候直播的时长/计时器是需要停止的--- 当然这里是精确的,如果不精确不停止也无所谓,这个看需求!!
总之,我们进入后台需要停止定时器,进入前台/APP,又需要继续,这个怎么办捏?
  • 可以暂停定时器,在某种情况下,再开启:
//关闭定时器  
[timer setFireDate:[NSDate distantFuture]];  
//开启定时器  
[timer setFireDate:[NSDate distantPast]];  
  • 实际应用 :
//页面将要进入前台,开启定时器  
-(void)viewWillAppear:(BOOL)animated  
{  
   [super viewWillAppear:animated];
    //开启定时器  
    [scrollView.timer setFireDate:[NSDate distantPast]];  
}  
  
//页面消失,进入后台不显示该页面,关闭定时器  
-(void)viewDidDisappear:(BOOL)animated  
{  
   [super viewDidDisappear:animated];
    //关闭定时器  
    [scrollView.timer setFireDate:[NSDate distantFuture]];  
} 

这样做的好处: 可以节省资源消耗,避免定时器在后台一直运行,占用CPU!!

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

推荐阅读更多精彩内容