일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Codable
- UserDefaults
- SwiftUI
- IOS
- scrollview
- 상호배제
- 데드락
- 오브젝트
- 동기화
- COLOR
- core data
- 가상 메모리
- 인프런
- Linked List
- async
- deadlock
- struct
- forEach
- 운영체제
- decode
- 알고리즘
- 프로세스 스케줄링
- 비동기
- 앨런
- 동시성
- @state
- 100 days of SwiftUI
- Algorithm
- Swift
- Apple Developer Academy
- Today
- Total
목록비동기 (11)
기어가더라도 제대로
그룹을 생성해주었는데, 해당 그룹에서 실행되는 작업들이 비동기적으로 실행되는 경우에 어떻게 해결이 되는지 확인해보자. 지금까지는 동기적인 작업을 설정해주었음 비동기 함수를 호출할 땐 **주의**해야함! 비동기 작업을 포함한 Task 의 경우, 실제 비동기 작업은 시작과 동시에 리턴되고, 실제 작업 종료시점이 아니라 임의의 시점에 작업이 완료되었다고 보고될 수 있음 즉, 제대로 일이 끝난 시점이 아니라는 뜻임. 시작점과 종료점을 명시적으로 선언 해줘야함. 입장과 퇴장의 짝이 맞으니 해결 실제 코드로 짜보는 것이 좋겠다.
목차 디스패치 그룹의 개념 디스패치 그룹의 사용 디스패치 그룹과 동기함수 디스패치 그룹과 비동기함수 (참고) Dispatch workItem (심화) Semaphore의 이해 디스패치 그룹의 개념 여러 스레드로 보낸 그룹으로 묶인 작업들이 대략적으로 언제 끝나는지 알고 싶을 때 사용 예) 이미지 다운로드가 다 완료된 시점에서 이미지를 활용하는 뷰 띄우기 작업을 큐에 보낼 때 해당 작업(Group1)의 꼬리표를 달아주고 모든 작업이 끝났을 때 `.notify(queue:)` 를 이용해서 완료시 할 작업을 설정 동기적인 기다림 모든 작업이 완료될 때까지 현재 대기열을 차단하는 동기적인 방법 `DispathGroup().wait` 만약 작업이 완료되길 기다리는 것을 동기적으로 ..
상단에서 weak self 를 선언하면 내부 클로저에서도 자연히 적용이 되는데 왜 그렇게 되는지를 알아보자. 예를 들어 메서드로 클로저를 호출하는 뷰컨이 있다고 가정하자. 전역 함수로 이 뷰컨을 생성해서 클로저를 품고 있는 메서드를 실행한다면 func localSomething() { let vc = ViewControler1() vc.doSomething() } class ViewController: UIViewController { let name: String = "뷰컨" func doSomething() { let nameClosure = { [weak self] in print(self?.name) }() } } 위의 함수를 호출했을때 doSomething() 메서드가 호출..