Iniciar sesión Registro
Anuncios
Tu espacio publicitario
Reserva este slot exclusivo para el periodo elegido.
Comprar publicidad →
Logotipo de la comunidad de telegram - Затишна Галера
Añadido 06 ene. 2025

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

@Zatishna_Galera
Número de suscriptores: 2 705
Fotos: 1,340
Videos: 429
Enlaces: 1,810
Descripción:
Голова Одеського центру розробки DataArt та Delivery Director, капітан Затишної Галери, ділитимуся: завданнями із співбесід (QA/Delivery/Management), статтями, вакансіями, новинами зі світу IT. Контакт: [email protected] ; Patreon: patreon.com/CozyGalley
Fuente

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

Logotipo de la comunidad de telegram - Затишна Галера Затишна Галера @Zatishna_Galera
620 Vistas/Alcance 2026-05-13 08:32 Mensaje №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