반응형
Task를 여러개 등록한 Class가 있다고 가정할때, 이들의 작업이 모두 완료 되기 전에 Class를 닫아야할 경우가 생깁니다.
이때 진행중인 작업을 즉시 완료 하고, 메모리에서 해제하고 싶을 때가 있는데요
Combine은 .store를 통해 여러개의 subject를 등록하고 Class해제 시점에 같이 해제 시켜줄 수 있는데요
class AnyClass {
private var subject = PassthroughSubject<String, Never>()
private var cancellables: [AnyCancellable] = []
init() {
subject
.sink { [weak self] text in
guard let self = self else { return }
}.store(in: &self.cancellables)
}
}
Task도 Combine의 .store() 처럼
Task를 등록하고 해제 시점에 자동으로 task가 해제되는게 있으면 어떨까 싶었는데
마침 아래 블로그에서 이에 대한 해법을 제시해주셨습니다.
http://minsone.github.io/swift-concurrency-AnyCancelTaskBag
class AnyClass {
let bag = AnyCancelTaskBag()
func foo() {
Task {
// Impl
}.store(in: bag)
}
}
이후 Class 주기와 함께 맞출 필요가 있는 Task는 위 처럼 사용하면 깔끔하게 해결 될 것 같습니다.
반응형
'Programming > Swift' 카테고리의 다른 글
MVVM+Router (0) | 2024.04.18 |
---|---|
[SwiftUI] 애플에서 제공하는 LazyVGrid 구현 예제 (0) | 2023.07.03 |
[SwiftUI] @StateObject 또는 @ObservedObject 차이점 (0) | 2023.04.18 |
Key path를 활용한 Swift Closure 활용하기 (0) | 2023.02.14 |
[WWDC2021] Your guide to keyboard layout (0) | 2022.12.14 |