一个全局的定时事件发生器
来源:互联网 发布:他改变了中国 知乎 编辑:程序博客网 时间:2024/04/19 02:08
我们在开发iOS App过程中常会有这样的需求,就是每隔一段时间内做一些类似刷新数据的操作。比如股票行情软件,需要每隔几秒更新股指、股票价格。这样的定时事件可能有很多种,发生事件的间隔都各不相同。我们可以实现一个全局的事件发生器,统一管理这些定时事件,简化操作。IFTimer类就是为此目的而来。
IFTimer的功能
- 添加、删除定时事件
- 添加、删除接收事件的对象
- 开始、停止事件发生器
- 设置事件发生器的灵敏度
IFTimer的原理
- 利用NSTimer作为事件的发生器
- 利用NSNotificationCenter作为事件的注册和通知
示例代码讲解
1. 创建IFTimer实例并初始化定时事件。在一个App里,你只需要创建一个实例即可。
[_timer addEvent:EVT_NAME1 interval:[NSNumber numberWithFloat:1.0]];[_timer addEvent:EVT_NAME2 interval:[NSNumber numberWithFloat:5.0]];[_timer addEvent:EVT_NAME3 interval:[NSNumber numberWithFloat:10.0]];
这里添加了三个事件,分别间隔1秒、5秒、10秒发生一次。
2. 注册需要监听这些事件的对象
[IFTimer addObserver:self selector:@selector(updateEvt1:) evtName:EVT_NAME1];[IFTimer addObserver:self selector:@selector(updateEvt2:) evtName:EVT_NAME2];[IFTimer addObserver:self selector:@selector(updateEvt3:) evtName:EVT_NAME3];
每个事件名对应一个响应的函数。
3. 启动事件发生器
[_timer start];
4.处理事件响应函数
- (void)updateEvt1:(NSNotification*)sender{ [[NSOperationQueue mainQueue] addOperationWithBlock:^{ self._evtCount1++; [_lable1 setText:[NSString stringWithFormat:@"%@ comes, count %ld", EVT_NAME1, self._evtCount1]]; }];}
5.不需要再监听事件时,可以移除事件监听
[IFTimer removeObserver:self evtName:EVT_NAME1];[IFTimer removeObserver:self evtName:EVT_NAME2];[IFTimer removeObserver:self evtName:EVT_NAME3];
其他
IFTimer是100毫秒检查一次定时事件是否已到,你可以通过下面的接口调整这个事件,可以加快或减慢检查的频率
- (void)setActiveInterval:(NSTimeInterval)interval;
代码已放到GitHub,点击下载。如有帮助,请多点赞。
0 0
- 一个全局的定时事件发生器
- python写的一个邮件发生器
- ajax的全局事件
- 请教一个activiti定时边界事件的用法
- 一个相当优秀的js随机数发生器程序
- android OpenGL开发 一个爆炸效果的粒子发生器
- NS2:添加一个新的流量发生器(poisson分布)
- 关于全局事件的使用
- WPF 创建全局的事件
- mysql如何创建一个定时事件
- mysql如何创建一个定时事件
- 正态分布的随机数发生器
- OpenCV的随机数发生器
- 一个全局控制的监听器
- jquery的ajax全局事件详解
- jquery的ajax全局事件详解
- Global.asax的用处-声明全局事件
- jquery的ajax全局事件详解
- Android NDK开发从0到1
- CSAPP笔记(概括)
- jQuery的child方法、find方法,区别?
- 游戏化思维——核心驱动力
- 【11g】使用REGEXP_COUNT函数统计字符串出现的次数
- 一个全局的定时事件发生器
- hdu 1071 The area
- PowerDesigner逆向工程,同时将comm注释转化为name显示
- Networking with URLSession: Authentication&ATS
- mysql数据库-外键
- redis存储关系性数据库数据
- 图片轮播
- Java并发编程系列之三:锁与volatile的内存语义
- 清除tomcat下的work目录