Login Sign Up
Advert
Your ad spot
Reserve this exclusive slot for the selected period.
Buy advertising →
Telegram community logo - Затишна Галера
Added 06 Jan 2025

Затишна Галера

@Zatishna_Galera
Number of subscribers: 2 705
Photos: 1,340
Videos: 429
Links: 1,810
Description:
Голова Одеського центру розробки DataArt та Delivery Director, капітан Затишної Галери, ділитимуся: завданнями із співбесід (QA/Delivery/Management), статтями, вакансіями, новинами зі світу IT. Контакт: [email protected] ; Patreon: patreon.com/CozyGalley
Source

Затишна Галера | iOSКомпас 🧭1️⃣5️⃣4️⃣ Завдання 154Чим взагалі відрізняється `@StateObje...

Telegram community logo - Затишна Галера Затишна Галера @Zatishna_Galera
620 Views/Reach 2026-05-13 08:32 Message №2648
#iOSКомпас 🧭1️⃣5️⃣4️⃣ Завдання 154Чим взагалі відрізняється `@StateObject` від `@ObservedObject`?Доброго здровля мої любі друзі. З вами ваш незмінний ios розробник Сергій з @badlinkschannel.🔣 SwiftUI виглядає простим - поки не доходиш до state management. А потім раптово зʼявляється питання: чим взагалі відрізняється @StateObject від @ObservedObject?. І головне - коли який використовувати, щоб не зламати життєвий цикл.1️⃣ @ObservedObject - «я просто слухаю»@ObservedObject var viewModel: MyViewModel Це найпростіший кейс: View не створює обʼєкт, вона лише підписується на нього. Тобто: обʼєкт приходить ззовні View не контролює його життєвий цикл View просто реагує на зміни🤓 Типовий сценарій - dependency injection:ParentView { ChildView(viewModel: viewModel)} `ChildView` нічого не знає про створення `viewModel`. І це нормально.2️⃣ Проблема: View перерисовується частіше, ніж здаєтьсяSwiftUI постійно пересоздає View. І якщо ти робиш так:@ObservedObject var viewModel = MyViewModel() то: View пересоздалась `viewModel` створився заново стан втраченоЦе одна з найпідліших пасток.3️⃣ @StateObject - «я володію цим обʼєктом»@StateObject var viewModel = MyViewModel() Тут усе інакше: обʼєкт створюється один раз SwiftUI зберігає його між перерисовками View контролює його життєвий циклЦе означає: навіть якщо View пересоздалась - viewModel залишиться той самий.4️⃣ Ключова різницяЯкщо спростити: `@StateObject` - створює і володіє `@ObservedObject` - отримує і спостерігаєІ все.Але саме це «і все» ламає половину SwiftUI-коду в продакшені.5️⃣ Як не помилитисяПросте правило: Якщо створюєш обʼєкт у View -> `@StateObject` Якщо передаєш ззовні -> `@ObservedObject`6️⃣ Антипатерн, який всі робилиstruct MyView: View { @ObservedObject var vm = MyViewModel()} Виглядає нормально.Працює... поки View не почне оновлюватись.Потім: скидається state губляться дані зʼявляються «фантомні» баги7️⃣ Чому це важливоЦе не про синтаксис. Це про життєвий цикл і ownership.SwiftUI - декларативний, але памʼять і стан ніхто не відміняв.І якщо неправильно обрати wrapper: або витече логіка або почне ресетитись state або все разомSwiftUI виглядає магією тільки до першого бага зі state. Далі - чиста інженерія.@Zatishna_Galera