一. GCD中定时器的使用方法
- 创建一个队列
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
- 创建一个GCD的定时器
/*
第一个参数:说明这是一个定时器
第四个参数:GCD的回调任务添加到那个队列中执行,如果是主队列则在主线程执行
*/
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
- 设置定时器的开始时间,间隔时间以及精准度
1.设置开始时间,三秒钟之后调用
//NSEC_PER_SEC : 1.0 * 10的9次方 纳秒
//注意点:GCD定时器中的时间以纳秒为单位(面试)
dispatch_time_t start = dispatch_time(DISPATCH_TIME_NOW,3.0 * NSEC_PER_SEC);
2.设置定时器工作的间隔时间
uint64_t intevel = 1.0 * NSEC_PER_SEC;
- 设置定时器的参数(开始时间,间隔时间,精准度)
1.第一个参数:要给哪个定时器设置
2.第二个参数:定时器的开始时间DISPATCH_TIME_NOW表示从当前开始
3.第三个参数:定时器调用方法的间隔时间
4.第四个参数:定时器的精准度,如果传0则表示采用最精准的方式计算,如果传大于0的数值,则表示该定时切换i可以接收该值范围内的误差,通常传0
该参数的意义:可以适当的提高程序的性能
dispatch_source_set_timer(timer, start, intevel, 0 * NSEC_PER_SEC);
- 设置定时器开启后回调的方法
/*
第一个参数:要给哪个定时器设置
第二个参数:回调block
*/
dispatch_source_set_event_handler(timer, ^{
NSLog(@"------%@",[NSThread currentThread]);
});
- 执行定时器
dispatch_resume(timer);
* 注意:`dispatch_source_t`本质上是OC类,在这里是个局部变量,需要强引用
先设置定时控制器强引用的属性
@property (nonatomic, strong) dispatch_source_t timer;
self.timer = timer;
二. GCD定时器补充
-
DISPATCH_SOURCE_TYPE_TIMER
定时响应(定时器事件) -
DISPATCH_SOURCE_TYPE_SIGNAL
接收到UNIX信号时响应 -
DISPATCH_SOURCE_TYPE_READ IO
操作,如对文件的操作、socket操作的读响应 -
DISPATCH_SOURCE_TYPE_WRITE IO
操作,如对文件的操作、socket操作的写响应 -
DISPATCH_SOURCE_TYPE_VNODE
文件状态监听,文件被删除、移动、重命名 -
DISPATCH_SOURCE_TYPE_PROC
进程监听,如进程的退出、创建一个或更多的子线程、进程收到UNIX信号 - 下面两个都属于Mach相关事件响应
DISPATCH_SOURCE_TYPE_MACH_SEND
DISPATCH_SOURCE_TYPE_MACH_RECV
- 下面两个都属于自定义的事件,并且也是有自己来触发
DISPATCH_SOURCE_TYPE_DATA_ADD
DISPATCH_SOURCE_TYPE_DATA_OR
网友评论