Мне интересно, может ли кто-нибудь объяснить, почему отправка обратно в основную очередь и создание повторяющегося NSTimer
Мне нужно добавить его в RUN LOOP, чтобы он тоже был огнем? Даже при использовании performselectorOnMainThread
мне все равно нужно добавить его в RUN LOOP, чтобы он загорелся.
Ниже приведен пример моего вопроса:
#define queue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
#define mainqueue dispatch_get_main_queue()
- (void)someMethodBeginCalled
{
dispatch_async(queue, ^{
int x = 0;
dispatch_async(mainqueue, ^(void){
if([_delegate respondsToSelector:@selector(complete:)])
[_delegate complete:nil];
});
});
}
- (void)compelete:(id)object
{
[self startTimer];
//[self performSelectorOnMainThread:@selector(startTimer) withObject:nil waitUntilDone:NO];
}
- (void)startTimer
{
NSTimer timer = [NSTimer timerWithTimeInterval:3 target:self selector:@selector(callsomethingelse) userInfo:nil repeats:YES];
//NSDefaultRunLoopMode
[[NSRunLoop currentRunLoop] addTimer:_busTimer forMode:NSRunLoopCommonModes];
}
EDIT:
Полагаю, я сформулировал этот вопрос очень плохо. Я хотел бы знать , почему [[NSRunLoop currentRunLoop] addTimer:_busTimer forMode:NSRunLoopCommonModes];
необходим в startTimer
, если я вызываю someMethodBeginCalled
. Если я не включаю эту строку, таймер не срабатывает.
Если я вызываю startTimer
из viewDidLoad
, например, я могу удалить строку NSRunLoop
, и таймер будет срабатывать каждые 60 секунд.