Я использую следующий код для периодического вызова функции каждую секунду. Проблема в том, что задержка на самом деле составляет 1,1 секунды и со временем смещается все больше и больше, как это видно в NSLogs (и это видно и в других частях кода, кроме NSLog). Я делаю это неправильно, или мне следует использовать таймер?
private func updateTimeCode() {
NSLog("Updating time")
//Some more code that doesn't take time
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 1.0) {
[weak self] in
self ? .updateTimeCode()
}
}
019-08-06 17:15:19.713234+0530 MyApp-Swift[8299:2685215] Updating time 2019-08-06 17:15:20.812652+0530 MyApp-Swift[8299:2685215] Updating time 2019-08-06 17:15:21.913188+0530 MyApp-Swift[8299:2685215] Updating time 2019-08-06 17:15:23.028814+0530 MyApp-Swift[8299:2685215] Updating time
[weak self]
бессмысленно. Закрытие GCD не вызывает циклов сохранения. ИспользуйтеDispatchSourceTimer
. Это намного надежнее. - person vadian   schedule 06.08.2019self
освобождаться до тех пор, пока блок не будет выполнен, что может быть или нежелательно в зависимости от ситуации. В этом конкретном случае разрешениеself
быть сильным будет создать цикл, потому что каждый раз, когда блок запускается, он меняет расписание, поэтомуweak
выполняет здесь свою работу (но согласитесь, что DispatchSourceTimer, вероятно, правильный инструмент). - person Rob Napier   schedule 06.08.2019