// // NSTimer+Convenience.h // NSTimerBlockDemo // // Created by huangyibiao on 15/3/25. // Copyright (c) 2015年 huangyibiao. All rights reserved. // #import <Foundation/Foundation.h> @interface NSTimer (Convenience) /** * 无参数无返回值Block */ typedef void (^HYBVoidBlock)(void); /** * 创建Timer---Block版本 * * @param interval 每隔interval秒就回调一次callback * @param repeats 是否重复 * @param callback 回调block * * @return NSTimer对象 */ + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)interval repeats:(BOOL)repeats callback:(HYBVoidBlock)callback; /** * 创建Timer---Block版本 * * @param interval 每隔interval秒就回调一次callback * @param count 回调多少次后自动暂停,如果count <= 0,则表示无限次,否则表示具体的次数 * @param callback 回调block * * @return NSTimer对象 */ + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)interval count:(NSInteger)count callback:(HYBVoidBlock)callback; /** * 开始启动定时器 */ - (void)fireTimer; /** * 暂停定时器 */ - (void)unfireTimer; @end
// // NSTimer+Convenience.m // NSTimerBlockDemo // // Created by huangyibiao on 15/3/25. // Copyright (c) 2015年 huangyibiao. All rights reserved. // #import "NSTimer+Convenience.h" @implementation NSTimer (Convenience) + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)interval repeats:(BOOL)repeats callback:(HYBVoidBlock)callback { return [NSTimer scheduledTimerWithTimeInterval:interval target:self selector:@selector(onTimerUpdateBlock:) userInfo:[callback copy] repeats:repeats]; } + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)interval count:(NSInteger)count callback:(HYBVoidBlock)callback { NSDictionary *userInfo = @{@"callback" : [callback copy], @"count" : @(count)}; return [NSTimer scheduledTimerWithTimeInterval:interval target:self selector:@selector(onTimerUpdateCountBlock:) userInfo:userInfo repeats:YES]; } + (void)onTimerUpdateBlock:(NSTimer *)timer { HYBVoidBlock block = timer.userInfo; if (block) { block(); } } + (void)onTimerUpdateCountBlock:(NSTimer *)timer { static NSUInteger currentCount = 0; NSDictionary *userInfo = timer.userInfo; HYBVoidBlock callback = userInfo[@"callback"]; NSNumber *count = userInfo[@"count"]; if (count.integerValue <= 0) { if (callback) { callback(); } } else { if (currentCount < count.integerValue) { currentCount++; if (callback) { callback(); } } else { currentCount = 0; [timer unfireTimer]; } } } - (void)fireTimer { [self setFireDate:[NSDate distantPast]]; } - (void)unfireTimer { [self setFireDate:[NSDate distantFuture]]; } @end
可以到github下载: https://github.com/632840804/NSTimerBlockDemo