Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define kOffset 0.05
- #define kTolerance 0.025
- @interface NSDate (Additions)
- + (NSDate *)nextFullMinuteDate;
- @end
- @implementation NSDate (Additions)
- + (NSDate *)nextFullMinuteDate {
- NSDateComponents *components = [[NSCalendar currentCalendar] components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit
- fromDate:[NSDate date]];
- [components setSecond:0];
- [components setMinute:[components minute] + 1];
- return [[NSCalendar currentCalendar] dateFromComponents:components];
- }
- @end
- @interface MinuteTimer : NSObject {
- NSTimer *timer;
- SEL selector;
- id target;
- id userInfo;
- }
- @property (nonatomic, retain) NSTimer *timer;
- @property (nonatomic, assign) SEL selector;
- @property (nonatomic, assign) id target;
- @property (nonatomic, assign) id userInfo;
- - (void)resetTimer;
- - (id)initWithTarget:(id)target
- selector:(SEL)aSelector
- userInfo:(id)userInfo;
- @end
- @implementation MinuteTimer
- @synthesize timer;
- @synthesize selector;
- @synthesize target;
- @synthesize userInfo;
- - (id)initWithTarget:(id)aTarget
- selector:(SEL)aSelector
- userInfo:(id)someUserInfo {
- self = [super init];
- if (self) {
- [self setTarget:aTarget];
- [self setSelector:aSelector];
- [self setUserInfo:someUserInfo];
- [self resetTimer];
- }
- return self;
- }
- - (void)performAction:(NSTimer *)aTimer {
- NSTimeInterval timeInterval = [[NSDate date] timeIntervalSince1970];
- timeInterval -= (NSInteger)timeInterval;
- if (timeInterval < kTolerance)
- [self resetTimer];
- [target performSelector:selector
- onThread:[NSThread currentThread]
- withObject:userInfo
- waitUntilDone:YES];
- }
- - (void)resetTimer {
- NSTimeInterval timeInterval = [[NSDate nextFullMinuteDate] timeIntervalSince1970];
- timeInterval += kOffset;
- NSTimer *newTimer = [[NSTimer alloc] initWithFireDate:[NSDate dateWithTimeIntervalSince1970:timeInterval]
- interval:60.0
- target:self
- selector:@selector(performAction:)
- userInfo:userInfo
- repeats:YES];
- [self setTimer:newTimer];
- [newTimer release];
- }
- - (void)setTimer:(NSTimer *)newTimer {
- [timer invalidate];
- [timer release];
- timer = newTimer;
- [timer retain];
- [[NSRunLoop currentRunLoop] addTimer:timer
- forMode:NSDefaultRunLoopMode];
- }
- @end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement