Я пытался заставить мою игру работать правильно с NSTimer
. Я видел, как у многих людей была проблема, похожая на меня, и мне просто нужно кое-что прояснить.
В основном у меня есть NSTimer
, работающий в основном потоке, который обновляет изображения, которые представляют время, но у меня также есть mapView. Когда пользователь перемещает карту, таймер блокируется. Мой вопрос: если я создам новый поток и добавлю таймер к его циклу выполнения, когда я выполняю селектор (который обновляет пользовательский интерфейс), не будет ли это снова блокировать поток таймера? Также я знаю, что обновлять пользовательский интерфейс из вторичного потока - плохая практика, как мне это сделать?
ОБНОВЛЕНИЕ: я думаю, что mapView блокировал таймер, поскольку они оба работали в одном цикле выполнения. Теперь я исправил это с помощью потока таймера с собственным циклом выполнения, однако это привело меня ко второй проблеме, из-за которой я очень застрял !! Вот код ...
//called when I need to restart the timer
[NSThread detachNewThreadSelector:@selector(resumeTimer) toTarget:self withObject:nil];
-(void) restartTimer {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
timer=[NSTimerscheduledTimerWithTimeInterval:1.
target:self
selector:@selector(dim)
userInfo:nil
repeats:YES];
[self performSelectorOnMainThread:@selector(timerImageUpdate)
withObject:nil
waitUntilDone:NO];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] run];
[pool drain];
}
Этот код дает мне ошибку Bad_access на [сливе из пула];
Я запустил код в инструментах и до сих пор не понимаю, почему он выдает ошибку. Любые идеи?