.h文件
#import <Foundation/Foundation.h>
@class TimerHolder;
@protocol TimerHolderDelegate <NSObject>
- (void)onTimerFired:(TimerHolder *)holder;
@end
@interface TimerHolder : NSObject
@property (nonatomic,weak) id<TimerHolderDelegate> timerDelegate;
- (void)startTimer:(NSTimeInterval)seconds
delegate:(id<TimerHolderDelegate>)delegate
repeats:(BOOL)repeats;
- (void)stopTimer;
@end
.m文件
#import "TimerHolder.h"
@interface TimerHolder ()
{
NSTimer *_timer;
BOOL _repeats;
}
- (void)onTimer: (NSTimer *)timer;
@end
@implementation TimerHolder
- (void)dealloc
{
[self stopTimer];
}
- (void)startTimer: (NSTimeInterval)seconds
delegate: (id<TimerHolderDelegate>)delegate
repeats: (BOOL)repeats
{
_timerDelegate = delegate;
_repeats = repeats;
if (_timer)
{
[_timer invalidate];
_timer = nil;
}
_timer = [NSTimer scheduledTimerWithTimeInterval:seconds
target:self
selector:@selector(onTimer:)
userInfo:nil
repeats:repeats];
}
- (void)stopTimer
{
[_timer invalidate];
_timer = nil;
_timerDelegate = nil;
}
- (void)onTimer: (NSTimer *)timer
{
if (!_repeats)
{
_timer = nil;
}
if (_timerDelegate && [_timerDelegate respondsToSelector:@selector(onTimerFired:)])
{
[_timerDelegate onTimerFired:self];
}
}
@end