用dispatch_source实现可取消的定时器
来源:互联网 发布:淘宝c店违反广告法处罚 编辑:程序博客网 时间:2024/05/16 01:29
1 在开发的过程中,定时器是一个必不可少的功能,我们可以用NStimer,CADisplayLink,GCD Timer
CADisplayLink 是一个保持屏幕同频率的计时器类,一般用在动画或者视频的渲染,不是作为定时器事件来用的。
NSTimer不多讲,这个刚入门的iOS开发者用的大多都是这个,而且大部分情况下能够实现我们的功能。比如取消已经在队列的任务。这个就需要用到GCD Timer了
而且GCD相对于NStimer有很多优势
1 GCD的定时器和NSTimer是不一样的,NSTimer受RunLoop影响,但是GCD的定时器不受影响,因为RunLoop也是基于GCD的
2 dispatch_source_t支持的类型比较多,不仅仅是timer,还有以下类型
1 Timer dispatch source:定期产生通知
2 Signal dispatch source:UNIX信号到达时产生通知
3 Descriptor dispatch source:各种文件和socket操作的通知 数据可读 数据可写 文件在文件系统中被删除、移动、重命名 文件元数据信息改变
4 Process dispatch source:进程相关的事件通知 当进程退出时 当进程发起fork或exec等调用 信号被递送到进程
5 Mach port dispatch source:Mach相关事件的通知
6 Custom dispatch source:
学会GCD Timer你不会吃亏
下面只介绍dispatch_source定时器的实现 先上代码
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_main_queue()); dispatch_source_set_timer(timer, dispatch_time(DISPATCH_TIME_NOW,HXMessageShowTime * NSEC_PER_SEC),10 * NSEC_PER_SEC , 0); dispatch_source_set_event_handler(timer, ^{ [self doSomething]; dispatch_cancel(timer); }); dispatch_resume(timer); }];
1 首先创建一个dispatch_source_create timer类型的信号量。
2 调用dispatch_source_set_timer设置信号的频率
3 用dispatch_source_set_event_handler设置定时器出发的事件
4 启用定时器。
5 在handler里面完成我们要做的工作,取消定时器。
我们也可以在程序的任何地方随时dispatch_cancel 这个定时器,这样就能取消定时器事件了
阅读全文
0 0
- 用dispatch_source实现可取消的定时器
- dispatch_source定时器使用记录
- dispatch_source
- dispatch_source
- 使用ionic angular 实现可取消选择的单选radio
- 可取消选择的单选框
- C#中可取消的Task
- 【转】可取消的异步操作
- Swift之dispatch_source实现多线程定时关闭功能
- 为Promise插上可取消的翅膀
- 关于动态加载的数据实现单选可取消的效果 并且附带 ScrollView滑动到指定位置
- [Java定时器]用Spring Task实现一个简单的定时器.
- 用javascript实现的一个定时器
- 用python的tiwsted实现一个定时器
- 用线程实现简单的定时器
- Linux定时器的实现
- php定时器的实现
- 定时器的实现
- CMD命令里的路径包含空格的解决方法
- 徒弟离职引发的思考(藏)
- java中的web.xml配置详解
- v-if,v-show连续使用
- 极乐技术周报(第二十三期)
- 用dispatch_source实现可取消的定时器
- return返回值
- [日推荐]『头像姬』我们是谁?
- 【HDU 1051】Wooden Sticks(贪心)
- rsyslog配置(亲测成功)
- 域名备案新手百问,备案问题一站解决
- maven编译 ,找不到本地已经导入jar包里面的类,找不到符号。
- 关于maven太慢
- python两种遍历字典(dict)的方法比较