... когда ... нажатие кнопки остановки ... это dispatchQueue
просто продолжить обработку
Да, именно поэтому вы не должны использовать это несколько asyncAfter
шаблон. (Кроме того, у вас могут возникнуть проблемы с объединением таймеров.) Timer
- правильный способ сделать это.
Так что у меня есть эта функция, которая каждые 15 минут загружает некоторые данные записи. бэкэнд Это должно произойти, даже если пользователь поместил приложение в фоновый режим.
Это проблема. Ни Timer
, ни asyncAfter
не могут решить эту проблему.
Я предполагаю, что вы пришли к выводу, что вы можете выполнить sh с помощью asyncAfter
, но не можете. Возможно, вы тестировали этот процесс во время работы приложения, подключенного к отладчику, который искусственно поддерживает работу приложения в фоновом режиме. Но попробуйте это на устройстве, не подключенном к отладчику, и вы обнаружите, что приложение не продолжает работать, когда пользователь покидает приложение. Этот asyncAfter
метод не даст sh того, что вы хотите.
Исключением здесь является то, что ваше приложение запрашивает одну из фоновых возможностей (например, VOIP, musi c, навигация и т. Д. * 1030). *.). Но если приложение предназначено для App Store, Apple довольно старательно отклоняет приложения, которые запрашивают фоновые сервисы для несанкционированных целей. Такая постоянная работа в фоновом режиме убивает батареи за считанные часы, поэтому Apple следит за наилучшими интересами своей пользовательской базы.
Итак, в итоге, если ваше приложение имеет возможность фонового выполнения, Timer
это способ сделать этот период c процесс. И если приложение не имеет возможности фонового выполнения, ни Timer
, ни какие-либо вызовы GCD не сделают эту работу.