我們?cè)陂_(kāi)發(fā)iOS App過(guò)程中常會(huì)有這樣的需求,就是每隔一段時(shí)間內(nèi)做一些類似刷新數(shù)據(jù)的操作兼搏。比如股票行情軟件泉粉,需要每隔幾秒更新股指连霉、股票價(jià)格。這樣的定時(shí)事件可能有很多種嗡靡,發(fā)生事件的間隔都各不相同跺撼。我們可以實(shí)現(xiàn)一個(gè)全局的事件發(fā)生器,統(tǒng)一管理這些定時(shí)事件讨彼,簡(jiǎn)化操作歉井。IFTimer類就是為此目的而來(lái)。
IFTimer的功能
- 添加哈误、刪除定時(shí)事件
- 添加哩至、刪除接收事件的對(duì)象
- 開(kāi)始、停止事件發(fā)生器
- 設(shè)置事件發(fā)生器的靈敏度
IFTimer的原理
- 利用NSTimer作為事件的發(fā)生器
- 利用NSNotificationCenter作為事件的注冊(cè)和通知
示例代碼講解
- 創(chuàng)建IFTimer實(shí)例并初始化定時(shí)事件蜜自。在一個(gè)App里菩貌,你只需要?jiǎng)?chuàng)建一個(gè)實(shí)例即可。
[_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]];
這里添加了三個(gè)事件重荠,分別間隔1秒箭阶、5秒、10秒發(fā)生一次戈鲁。
- 注冊(cè)需要監(jiān)聽(tīng)這些事件的對(duì)象
[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];
每個(gè)事件名對(duì)應(yīng)一個(gè)響應(yīng)的函數(shù)仇参。
- 啟動(dòng)事件發(fā)生器
[_timer start];
- 處理事件響應(yīng)函數(shù)
- (void)updateEvt1:(NSNotification*)sender{
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
self._evtCount1++;
[_lable1 setText:[NSString stringWithFormat:@"%@ comes, count %ld", EVT_NAME1, self._evtCount1]];
}];
}
- 不需要再監(jiān)聽(tīng)事件時(shí),可以移除事件監(jiān)聽(tīng)
[IFTimer removeObserver:self evtName:EVT_NAME1];
[IFTimer removeObserver:self evtName:EVT_NAME2];
[IFTimer removeObserver:self evtName:EVT_NAME3];
其他
IFTimer是100毫秒檢查一次定時(shí)事件是否已到婆殿,你可以通過(guò)下面的接口調(diào)整這個(gè)事件诈乒,可以加快或減慢檢查的頻率
- (void)setActiveInterval:(NSTimeInterval)interval;
代碼已放到GitHub,點(diǎn)擊下載婆芦。如有幫助怕磨,請(qǐng)多點(diǎn)贊。