docs: update docs
This commit is contained in:
parent
77a8d43499
commit
f1b72bad8c
|
|
@ -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() // Уничтожаем таймер
|
||||
```
|
||||
|
|
|
|||
Loading…
Reference in New Issue