GCD之定时器dispatch_source_t(转载暂时未完全理解)

简介:

#import "ViewController.h"
 
@interface ViewController (){
    IBOutlet UIButton *l_timeButton;
}
 
 
@end
 
@implementation ViewController
 
- (void)viewDidLoad
{
    [super viewDidLoad];
    [l_timeButton addTarget:self action:@selector(startTime) forControlEvents:UIControlEventTouchUpInside];
}
-(void)startTime{
    __block int timeout=30; //倒计时时间
    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),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(), ^{
                //设置界面的按钮显示 根据自己需求设置
                [l_timeButton setTitle:@"发送验证码" forState:UIControlStateNormal];
                l_timeButton.userInteractionEnabled = YES;
            });
        }else{
            //            int minutes = timeout / 60;
            int seconds = timeout % 60;
            NSString *strTime = [NSString stringWithFormat:@"%.2d", seconds];
            dispatch_async(dispatch_get_main_queue(), ^{
                //设置界面的按钮显示 根据自己需求设置
                NSLog(@"____%@",strTime);
                [l_timeButton setTitle:[NSString stringWithFormat:@"%@秒后重新发送",strTime] forState:UIControlStateNormal];
                l_timeButton.userInteractionEnabled = NO;
                 
            });
            timeout--;
             
        }
    });
    dispatch_resume(_timer);
     
}
 
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
 
@end

相关文章
|
网络虚拟化 网络架构
dis ip int brief命令的作用是什么?
dis ip int brief命令通常是指在设备上查看路由器或交换机接口的摘要信息。这个命令的目的是显示设备上所有接口的基本信息,包括接口的状态、IP地址、协议等。
|
iOS开发
iOS多线程的初步研究-- dispatch同步
GCD提供两种方式支持dispatch队列同步,即dispatch组和信号量。
190 0
|
API Windows
ASIO的post和dispatch方法
ASIO的post和dispatch方法的实现和差别
1455 0
GCD全解-dispatch_after/dispatch_time-t延迟操作
GCD全解-dispatch_after/dispatch_time-t延迟操作
358 0
GCD全解-dispatch_queue-队列创建
GCD全解-dispatch_queue-队列创建
305 0
GCD全解-dispatch_barrier_sync/async-栅栏函数
GCD全解-dispatch_barrier_sync/async-栅栏函数
288 0
|
监控
Dispatch Source 应用
Dispatch Source 源是一个偏底层的函数集合,使用时CPU负荷非常小,尽量不占资源,开发过程中大多是配合定时器使用。
206 0
|
安全 调度
GCD全解-dispatch_once-创建单例
单例是一种类,该类只在第一次用的时候实例化一个对象,后期直接调用此对象。 在Foundation框架中比如NSFileManger和NSNotificationCenter,分别通过它们的类方法defaultManager和defaultCenter获取。尽管不是严格意义的单例,这些类方法返回一个可以在应用的所有代码中访问到的类的共享实例。
176 0
|
安全 iOS开发
GCD全解-dispatch-多个网络请求处理
在开发中,我们会经常遇到这样的需求,需要我们同时做多个网络请求,然后架构所需数据,再统一渲染页面。
257 0
|
JavaScript
说说 element 组件库 broadcast 与 dispatch
说说 element 组件库 broadcast 与 dispatch
282 0