Я пишу приложение Какао с графическим интерфейсом, разработанным в Интерфейсном Разработчике.Мне нужно планировать фоновую активность (с регулярными интервалами), не блокируя пользовательский интерфейс, поэтому я запускаю ее в отдельном потоке, например:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
[self performSelectorInBackground:@selector(schedule) withObject:nil];
}
- (void) schedule {
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
NSRunLoop* runLoop = [NSRunLoop currentRunLoop];
timer = [[NSTimer scheduledTimerWithTimeInterval:FEED_UPDATE_INTERVAL
target:activityObj
selector:@selector(run:)
userInfo:nil
repeats:YES]
retain];
[runLoop run];
[pool release];
}
Я сохраняю таймер, поэтому я могу легко аннулировать и перепланировать.
Проблема: я должен также запустить метод run: в ответ на события GUI, чтобы он был синхронным (т. Е. Кнопка «выполнить действие»).Вот так:
[timer fire];
Я мог бы сделать это и с помощью executeSelectorInBackground, и, конечно, он не блокирует пользовательский интерфейс.Но эта синхронная стрельба запускается в очередной прогон!Поэтому у меня нет гарантии, что они не будут пересекаться.Как я могу поставить в очередь все мои увольнения в одном и том же цикле выполнения?