这是一个单例
- (void)scheduledDispatchTimerWithName:(NSString *)timeName timeInterval:(double)interval queue:(dispatch_queue_t)queue repeats:(BOOL)repeats action:(dispatch_block_t)action{
if(nil == timerName) return;
if(nil == queue){
queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
dispatch_source_t timer = [self.timerContainer objectForKey:timerName];
}
if(!timer){
timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER,0,0,queue);
dispatch_resume(timer);
[self.timerContainer setObject:timer forKey:timeName];
}
dispatch_source_set_timer(timer,dispatch_time(DISPATCH_TIME_NOW,interval*NSEC_PER_SEC),interval*NSEC_PER_SEC,0.1*NSEC_PER_SEC);
__weak typeof(self) weakSelf = self;
dispatch_source_set_event_handler(timer,^{
action();
if(!repeats){
[weakSelf cancelTimerWithName:timerName];
}
});
}
- (void)cancelTimerWithName:(NSString*)timerName{
dispatch_source_t timer = [self.timerContainer objectForKey:timerName];
if (!timer) return;
[self.timerContainer removeObjectForKey:timerName];
dispatch_source_cancel(timer);
}
自己封装的GCD定时器方法
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 相信大家在开发中都会使用到定时器, 但又常常对定时器的循环引用问题, NSTimer 释放时机的选择上,劳神费力!...
- 纪实生活 体悟人生 那天我与“豪鬼”探讨 关于市场营销的问题的时候 唉呀 他大叫了一声 搞错了 搞错了 我们被那个...