Skip to content

Socket 생명 주기 관리

kangho lee edited this page Aug 27, 2025 · 1 revision

Case 의도하지 않게 DetailView에서 소켓이 켜지는 경우

onChange + scenePhase를 이용해서 소켓 on/off를 관리

증상: detailView에서도 background 후 active로 돌아올 때, 소켓이 켜짐

해결: 사용하는 View에서 isActive flag를 관리하여, 해당하는 뷰에서만 소켓이 켜지게 만듦

Case TabView에서 prelayout

onAppear + onDisAppear에서 소켓 생명 주기 관리

증상: TabView에서 아직 보이지 않는 Tab까지 미리 레이아웃을 그려서, onAppear를 호출

해결: SelectedTab을 관리하는 TabRouter를 environment로 만들어서 관리하고, flag로 사용

.onChange(of: scenePhase, { _, newValue in
  Task {
      guard router.selected == .market && isActive else { return }
      await handleConnection(by: newValue)
    }
})

.task {
   isActive = true
   guard router.selected == .market else { return }
   await store.connect()
}
.onDisappear {
    Task {
     isActive = false
     await store.disconnect()
   }
}

Clone this wiki locally