Мне известно о многих вопросах, касающихся этой темы, поскольку я сам задавал один вопрос ранее, однако теперь моя проблема, по-видимому, больше связана с частью потоков. У меня есть следующие 2 метода.
-(void) restartTimer {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
self.timer = [NSTimer scheduledTimerWithTimeInterval:1.
target:self
selector:@selector(dim)
userInfo:nil
repeats:YES];
time = 31;
NSLog(@"calling restart timer");
[self performSelectorOnMainThread:@selector(timerImageUpdate) withObject:nil waitUntilDone:NO];
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] run];
[pool drain];
}
-(void) resumeTimer {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
self.timer = [NSTimer scheduledTimerWithTimeInterval:1.
target:self
selector:@selector(dim)
userInfo:nil
repeats:YES];
NSLog(@"calling resume timer");
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] run];
[pool drain];
}
Функция restartTimer вызывается, когда начинается игра. Это работает отлично, и таймер красиво запускает тусклый селектор. Проблема возникает, когда пользователь нажимает мою кнопку пропуска в быстрой последовательности. [пропустить] обновляет MKMapView и в методе делегата mapdid, для которого выполняется загрузка, вызывается следующим образом:
[NSThread detachNewThreadSelector: @selector (restartTimer) toTarget: self withObject: nil];
Когда это происходит, кажется, что создано несколько таймеров, и, таким образом, моя функция диммирования вызывается слишком часто, создавая впечатление, что одиночный таймер работает очень быстро? Каков наилучший способ запустить и перезапустить таймер, используя вторичный поток? Обратите внимание, что эта проблема возникает только в том случае, если кнопка пропуска нажимается многократно и быстро, тогда как она работает нормально, если просто нажимать время от времени?
У кого-нибудь есть идеи? Большое спасибо
Jules