docs: update docs

This commit is contained in:
Loupehope 2021-09-16 10:17:46 +03:00 committed by GitHub
parent 77a8d43499
commit f1b72bad8c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 41 additions and 19 deletions

View File

@ -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() // Уничтожаем таймер
```