美文网首页
ios 两种实现定时器的不同方

ios 两种实现定时器的不同方

作者: Dubai | 来源:发表于2016-12-13 14:52 被阅读0次

一、 NSTimer

(还可以传值,做你想做的事)

- (IBAction)timerAction:(UIButton *)sender {

_timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(countDown:) userInfo:@{@"btn" : sender} repeats:YES];

}

当你所需要定时的时间走完之后重新定时列如60秒

- (void)countDown:(NSTimer *)timer{

UIButton *btn = timer.userInfo[@"btn"];

[btn setUserInteractionEnabled:NO];

count -- ;

[btn setTitle:[NSString stringWithFormat:@"%lds",(long)count] forState:UIControlStateNormal];

if (count == 0) {

count = 60;

[btn setTitle:@"重新发送" forState:UIControlStateNormal];

[btn setUserInteractionEnabled:YES];

[_timer invalidate];

_timer = nil;

}

}

别忘了释放_time,但是网上好多说法--这样释放不掉timer,因为被RunLoop强引用了...

-(void)dealloc

{

[_timer invalidate];

_timer = nil;

NSLog(@"%@ dealloc", NSStringFromClass([self class]));

}

二、使用CGD

#pragma mark GCD 倒计时

- (IBAction)gcdAction:(UIButton *)sender {

[sender setUserInteractionEnabled:NO];

__block int timeout = 60;

dispatch_queue_t quene =  dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_source_t timer  = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, quene);

dispatch_source_set_timer(timer, dispatch_walltime(NULL, 0), 1.0 * NSEC_PER_SEC, 0);

dispatch_source_set_event_handler(timer, ^{

if (timeout == 0) {

dispatch_source_cancel(timer);

dispatch_async(dispatch_get_main_queue(), ^{

[sender setUserInteractionEnabled:YES];

[sender setTitle:@"重新发送" forState:UIControlStateNormal];

});

}else{

timeout -- ;

dispatch_async(dispatch_get_main_queue(), ^{

[sender setTitle:[NSString stringWithFormat:@"%ds",timeout] forState:UIControlStateNormal];

});

}

});

dispatch_resume(timer);

}

闲下来时就因该学习一下.Demo以上传到gitHub上面 感兴趣的小伙伴可以下载探讨一下,有问题或者建议欢迎骚扰!

笔尖下的诱惑~

相关文章

  • ios 两种实现定时器的不同方

    一、 NSTimer (还可以传值,做你想做的事) - (IBAction)timerAction:(UIButt...

  • iOS推送通知及静默推送相关

    iOS推送 在IOS推送服务中,Apple提供了两种不同方式的推送形式,...

  • swift 定时器

    定时器的两种简单实现方式: 1.timer 2.GCD 上面两种方法以及实现简单的定时器,但是还有一个隐藏的问题,...

  • iOS 定时器耗电探究

    iOS开发中的几种定时器 iOS开发中定时器实现方式大致有三种,一种是Timer实现,一种是通过GCD自己创建,另...

  • IOS-UITimer的使用

    UITimer 是 iOS 系统中的定时器。 今天主要实现的功能点 开始/停止 定时器,给定时器刷新函数带入参数和...

  • 定时器

    定时器在开发中经常使用的,下面说两种定时器的的实现。 1:使用 GCD实现 (防止按钮重复点击) 2:使用 RAC...

  • 无标题文章

    iOS NSTimer使用详解-开启、关闭、移除 定时器定时器详解ios定时器关闭定时器NSTimer 1、要使用...

  • iOS进阶-谈谈定时器

    目录 iOS提供定时器API 定时器开发中的坑 一、 iOS提供定时器API 二、定时器开发中的坑 2.1、必须办...

  • 定时器

    定时器,指的是每隔一段时间就执行一次代码。在JavaScript中,对于定时器的实现有两种方法: setTimeo...

  • 使用RxJava实现定时器功能

    使用RxJava实现定时器功能可以通过两种方式来实现,具体实现如下: 一、使用timer 操作符 二、使用使用in...

网友评论

      本文标题: ios 两种实现定时器的不同方

      本文链接:https://www.haomeiwen.com/subject/qkqbmttx.html