TaskTimerTool.m
2.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
//
// TaskTimerTool.m
// DreamSleep
//
// Created by peter on 2022/7/1.
//
#import "TaskTimerTool.h"
@interface TaskTimerTool ()
/// 当前时长
@property (nonatomic, assign) NSInteger curTimeCount;
/// 任务定时器
@property (nonatomic, strong) NSTimer *taskTimer;
@end
@implementation TaskTimerTool
- (instancetype)initWithTaskTimeCount:(NSInteger)taskTimeCount delegate:(id<TaskTimerToolDelegate>)delegate {
if (self = [super init]) {
self.curTimeCount = 0;
self.taskTimeCount = taskTimeCount;
self.delegate = delegate;
}
return self;
}
- (instancetype)initWithBlock:(TaskTimeFinishedBlock)block {
if (self = [super init]) {
self.curTimeCount = 0;
self.taskTimeFinishedBlock = block;
}
return self;
}
- (void)excuteTask {
[self.taskTimer setFireDate:[NSDate date]];
}
- (void)stopTask {
[self.taskTimer setFireDate:[NSDate distantFuture]];
[_taskTimer invalidate];
_taskTimer = nil;
}
- (void)reset {
[self.taskTimer setFireDate:[NSDate distantFuture]];
self.curTimeCount = 0;
}
- (void)dealloc {
[_taskTimer invalidate];
_taskTimer = nil;
}
#pragma mark - lazy
- (NSTimer *)taskTimer {
if (!_taskTimer) {
WS(weakSelf);
_taskTimer = [NSTimer timerWithTimeInterval:1.0 repeats:YES block:^(NSTimer * _Nonnull timer) {
DSLog(@"self.curTimeCount:%ld", self.curTimeCount);
// 标记完成任务
if (weakSelf.curTimeCount >= self.taskTimeCount) {
[weakSelf.taskTimer setFireDate:[NSDate distantFuture]];
if (weakSelf.delegate && [weakSelf.delegate respondsToSelector:@selector(taskTimerHasFinished)]) {
[weakSelf.delegate taskTimerHasFinished];
}
if (weakSelf.taskTimeFinishedBlock) {
weakSelf.taskTimeFinishedBlock();
}
return;
}
weakSelf.curTimeCount++;
}];
[[NSRunLoop currentRunLoop] addTimer:_taskTimer forMode:NSRunLoopCommonModes];
}
[_taskTimer setFireDate:[NSDate distantFuture]];
return _taskTimer;
}
@end