티스토리 뷰
728x90
반응형
- 데드락(두 개 이상의 작업이 서로 작업이 끝나기 만을 기다리고 있기 때문에 아무것도 완료가 안됨)에 빠져서 에러가 호출됩니다.
- 예를 들어, IBAction 블럭 안에서 sync 를 호출하게 되면 IBAction 블럭이 반환되기 전까지 main.sync 블럭은 큐에 삽입되지 않습니다. 이렇게 되면 IBAction 블럭은 main.sync 가 실행되지 않으니 멈추고, main.sync 블럭은 동기적으로 삽입되기 때문에 기다리게 되면서 멈춥니다.
- 명시적으로 스레드를 지정하지 않을 경우 main 스레드에서 task 가 실행됩니다.
// 즉, 위의 경우는 아래의 코드와 동일한 구조를 가집니다.
DispatchQueue.main.async { // outer
DispatchQueue.main.sync { // inner
// outer block 이 종료되기 전까지 main queue 에 task 를 삽입하지 않는다.
}
// inner block 이 종료되기 전까지 outer block 은 종료되지 않는다.
}
👉 main.sync 는 정말 실행이 안될까?
- background 스레드에서 작업들을 순서대로 UI 업데이트해야할 때 사용 가능.
- 애플 문서에서 사용한 것 봄.
- PHPPhotoLibrary data source 와 업데이트한 콜렉션 뷰의 데이터가 달라지는 것을 방지하기 위해 main.sync 를 사용하여 해당 블록이 끝나기 전까지 다른 작업이 큐에 들어오는 것을 막기 위한 용도이다. https://developer.apple.com/documentation/photokit/phphotolibrarychangeobserver
비슷한 원리로 이중 큐 구조에서 같은 큐에서 sync 로 작업을 추가하는 경우. 안쪽에 있는 queue 가 sync 일 경우도 에러이다.
해당 sync 블럭을 감싸는 것이 종료되어야 sync 블럭이 큐에 추가되는데 큐에 추가가 되지 않으니 종료도 되지 않는 것이다.
728x90
반응형
'iOS' 카테고리의 다른 글
iOS) 앱 자동 배포를 위한 Fastlane 설정 - cert and sigh (7) | 2022.10.10 |
---|---|
iOS) 프로젝트 배포 환경별 Build Scheme 세팅(.xcconfig 사용) + key 숨기기 (4) | 2022.10.04 |
iOS) lazy, type property 는 언제 초기화될까? (0) | 2022.09.27 |
iOS) mutating 키워드는 무엇일까? (0) | 2022.09.26 |
iOS) Live Activities 와 Dynamic Island 뉴스 살펴보기 (0) | 2022.09.25 |
댓글
TAG
- projectsetting
- github
- MVVM
- Algorithm
- SwiftUI
- WWDC22
- Firebase
- Notification
- Objective-C
- MOYA
- YPImagePicker
- Swift
- Widget
- 서버통신
- async/await
- configurable widget
- APNS
- IOS
- CloneCoding
- UserDefaults
- 2022 KAKAO TECH INTERNSHIP
- Protocol
- containerBackground
- OpenSourceLibrary
- WidgetKit
- WWDC
- watchOS
- urlsession
- rxswift
- RxCocoa
최근에 올라온 글
최근에 달린 댓글
글 보관함
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
링크
- Total
- Today
- Yesterday