У меня есть таймер, сгенерированный за 5 секунд, добавленный в глобальную очередь, хотя я недействителен после 2-секундного цикла цикла, который не заканчивается до 5 секунд. В следующем фрагменте backgroundTimer является экземпляром var, а run - это функция-член. Что не так в следующем коде, который блокирует завершение цикла цикла.Как удалить таймер из runloop немедленно
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
_backgroundTimer = [NSTimer timerWithTimeInterval:5 target:self selector:@selector(run) userInfo:nil repeats:NO];
[ [NSRunLoop currentRunLoop] addTimer:_backgroundTimer forMode:NSRunLoopCommonModes];
[[NSRunLoop currentRunLoop] run];
NSLog(@"Run loop terminated");
});
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[_backgroundTimer invalidate];
_backgroundTimer=nil;
});
даже попытался добавить CFRunLoopStop ([[NSRunLoop currentRunLoop] getCFRunLoop]); после недействительности, – pradeepa