본문 바로가기

iOS/Concurrency5

AsyncPublisher (구독을 하지 않고 데이터의 변화를 확인) AsyncPublisher란, 관찰하고 싶은 객체에 대한 구독을 하지 않고 그 value들을 확인 할 수 있다. class AsyncPublisherDataManager { @Published var myData: [String] = [] // 2초 마다 myData에 데이터를 넣어주는 함수 func addData() async { myData.append("Apple") try? await Task.sleep(nanoseconds: 2_000_000_000) myData.append("Banana") try? await Task.sleep(nanoseconds: 2_000_000_000) myData.append("Orange") try? await Task.sleep(nanoseconds: 2_000.. 2022. 12. 26.
@MainActor, @globalActor 조금 더 이해하기 @MainActor, @globalActor 는 결국 actor의 종류이다. 우선 actor를 왜 쓸까? 비동기적인 상황에서 concurrency를 보장해주기 위해서 사용하는 것이다. @MainActor의 경우, 진행되는 동작을 Main thread로 보내고, thread safe하게 동작함을 보장한다. (DispatchQueue.main의 역할과 비슷) @MainActor와 동일한 이유로, @globalActor 역시, 해당 globalActor를 사용하게 되면 background에서 진행되는 동작들의 concurrency를 보장하고 해당 @globalActor를 전역변수로 만들어 @MainActor를 사용할 때와 동일하게 어떤 상황에서도 사용하기 쉽게 만드는 것이다. 'MainActor.run'이 사.. 2022. 12. 23.
Sendable 프로토콜에 대해! 2023.10.04 1차 수정 프로토콜 중 하나인 Sendable! 써져있는 그대로 Sendable하다는 것이다. 두괄식으로 말하자면! 비동기상황에서 값을 전달할때, 전달하는 값이 thread safe해서 변경될 여지가 없다고 보장하는 표시이다! 그럼 어떤 상황에서 Sendable을 명시적으로 적어줘야 할까? 간단한 예시와 알아보자! actor CurrentUserManager { func updateDataBase(userInfo: String) { } } class SendableViewModel: ObservableObject { let manager = CurrentUserManager() func updateCurrentUserInfo() async { await manager.updateDat.. 2022. 12. 20.
class대신 actor가 요긴한 상황! 해당 글은 Actor에 대한 아주 기본적인 이해만 있다면 이해하는 데 아무 문제가 없습니다! Actor에 대해서 알아보고, 알아봤다는 현상만이 내 머리 속에 남았는데.. 그중 생각나는 중요한 부분이! Class와 거의 동일한 부분이 많았지만, Class가 thread safe 하지 않다면, Actor는 thread safe하다는 것이다. 그래서..! 아 그럼 Actor가 나온 배경은 Class의 thread safe문제를 해결 할 수 있어서 나왔겠구나! 라고 생각하게 되었고, 실제로 탄생 배경이 그러했다. 그럼, 이 글에서는 1. 어떤 문제를 Actor가 풀어야 했는지! 2. 그래서 Actor가 있기 전에도 동일한 문제가 있었을텐데 어떻게 해당 문제가 풀리고 있었는지 3. 그 문제를 Actor를 활용해서.. 2022. 12. 19.