From f1b72bad8c5cdaccd3fc6801d372f9a0a5547f92 Mon Sep 17 00:00:00 2001 From: Loupehope <31570429+Loupehope@users.noreply.github.com> Date: Thu, 16 Sep 2021 10:17:46 +0300 Subject: [PATCH] docs: update docs --- TIFoundationUtils/Sources/TITimer/README.md | 60 ++++++++++++++------- 1 file changed, 41 insertions(+), 19 deletions(-) diff --git a/TIFoundationUtils/Sources/TITimer/README.md b/TIFoundationUtils/Sources/TITimer/README.md index b59a15ae..8f4668bf 100644 --- a/TIFoundationUtils/Sources/TITimer/README.md +++ b/TIFoundationUtils/Sources/TITimer/README.md @@ -1,37 +1,59 @@ # TITimer ## Pretty timer ⏰ -The library allows you to create a timer that works either with [RunLoop](#Runloop) or with [GCD](#GCD). +Эта библиотека позволяет создавать таймер, который работает как с [RunLoop'ом](#Runloop) , так и с [GCD](#GCD). -### Features +### Особенности -- Track the time even while the application is in the background. For more, see - [TimerRunMode](Sources/TITimer/Enums/TimerRunMode.swift) -- Create a timer on a personal queue or on a special Runloop mode. For more, see - [TimerType](Sources/TITimer/Enums/TimerType.swift) -- The code is covered by tests 🙂 +- Учитывает время проведенное приложением в background состоянии. Детали - [TimerRunMode](Sources/TITimer/Enums/TimerRunMode.swift) +- Можно создавать таймер на собственной очереди или на необходимом режиме Runloop'а. Детали - [TimerType](Sources/TITimer/Enums/TimerType.swift) -### Examples +### Runloop.main vs GCD -#### RunLoop +#### Особенности работы таймера с Runloop.main + +- Runloop есть у каждого потока, но сразу запущенный только у главного - Runloop.main +- Устанавливая таймер для конкретного режима Runloop.main, мы получаем события в eventHandler, только когда Runloop находится в данном состоянии +- Runloop.main может работать в трех режимах: + - `traking` - когда активно взаимодействуем с приложением, например, скроллим таблицу + - `default` - все остальные состояния отличные от traking + - `common` - включает в себя обработку событий и traking, и default + +#### Особенности работы таймера с GCD + +- Вызов метода eventHandler будет происходить на той же очереди, на которую добавили +- Eсли хотите обновлять UI, то необходимо быть уверенным, что перевели выполнение на главную очередь! + +#### Что выбрать + +- Используйте Runloop.main, когда необходимо обрабатывать события таймера на главном потоке, например, обновлять UI +- Используйте GCD, если обработка событий таймера не требует работы с UI или она слишком ресурсоёмкая и не хотите нагружать главный поток +- Вы также можете создать свой поток и Runloop, но эта ситуация слишком редкая в повседневной разработке, что рассматривать её не будем + +В 90% случаев достаточно использовать Runloop.main с режимом common - `TITimer.default`. + +### Примеры + +#### Runloop.main ```swift -timer = TITimer(type: .runloopTimer(runloop: .current, mode: .default), mode: .activeAndBackground) - -timer.eventHandler = { - // handle elapsed time -} - -timer.start() -timer.invalidate() +timer = TITimer(type: .runloopTimer(runloop: .main, mode: .common), mode: .onlyActive) ``` #### GCD ```swift timer = TITimer(type: .dispatchSourceTimer(queue: .main), mode: .activeAndBackground) - +``` + +#### Возможные активности + +```swift timer.eventHandler = { - // handle elapsed time + // Получаем события } -timer.start() -timer.invalidate() +timer.start() // Запустить таймер +timer.pause() // Останавливаем таймер +timer.resume() // Возобновляем его работу +timer.invalidate() // Уничтожаем таймер ```