Традиционно в программировании используют синхронное программирование, когда все инструкции выполняются последовательно, друг за другом. Пока одна синхронная операция не закончит свою работу, другие не смогут ее начать.
В противовес синхронному существует асинхронное программирование, при котором операция не блокирует выполнение приложения (или конкретный поток !!!ссылка!!!), позволяя нескольким операциям выполняться параллельно.
В iOS доступны следующие механизмы, позволяющие использовать асинхронное поведение в приложения:
- Notification Center - слежение за различными событиями, например положение клавиатуры, поворотом экрана.
- Key-Value Observing - слежение за изменение переменных.
- URLSession - загрузка данных (файлов, web-страниц) без блокировки текущего потока.
- Инструменты многопоточности (Async/await, Thread, GCD, Operations)
- Closures/Callbacks
- Combine, RxSwift, ReactiveSwift - фреймворки для реактивного программирования
и другие
Реактивное программирование - это парадигма, объединяющая в себе асинхронность и потоки данных (streams, не путать с threads). Например, в приложении может существовать некоторый Publisher, генерирующий поток событий (поток данных), и подписанные на него Subscribers, слушающие данный поток и требуемым образом реагирующие на него.
Наиболее известными представителями "реактивщины" в iOS являются:
- Combine
- RxSwift
- ReactiveSwift