Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- RxCocoa
- uiscrollview
- tableView
- 애니메이션
- clean architecture
- rxswift
- 클린 코드
- MVVM
- ribs
- map
- UITextView
- Clean Code
- 리펙터링
- collectionview
- combine
- Xcode
- 스위프트
- SWIFT
- Human interface guide
- swiftUI
- 리팩토링
- swift documentation
- 리펙토링
- Refactoring
- ios
- Observable
- UICollectionView
- Protocol
- uitableview
- HIG
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 커스텀 뷰에서 DispatchQueue.main 사용 시 주의사항 본문
DispatchQueue.main 및 스레드 동작 개념
* 이전 포스팅 글 참고
기본 상식) UI코드와 main thread
- UI 코드를 초기화하거나 접근할 때 main thread가 아니면 Xcode에서 디버그 모드에서 crash를 내주며 개발자에게 main thread에서 호출하도록 유도
- 주의할점은 뷰를 초기화 할 때도 main thread에서 수행이 필수
ex) 뷰를 background thread에서 수행하면 Xcode에서 에러 발생
커스텀 뷰에서의 DispatchQueue.main 사용 시 주의사항
- 보통 커스텀 뷰를 구현할 때, 뷰 내부 코드에 DispatchQueue.main을 넣는 경우가 존재
- (외부에서 해당 뷰를 사용할 때 어차피 DispatchQueue.main으로 불러야하니 커스텀 뷰에 DispatchQueue를 넣는 경우)
- ex) 아래 showSomeAnimation()에서 DispatchQueue.main 사용
class SomeVC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
func showSomeAnimation() {
DispatchQueue.main.async {
// animation...
}
}
}
- 위와 같이 구현되는 경우가 종종 있지만, 위와 같이 구현했을때 이 뷰를 사용하는 쪽에서는 showSomeAnimation() 코드는 무조건 async로 동작하게되어, sync로 동작하게 하고싶어도 불가능한 상태
- 때문에 커스텀 뷰를 구현할 때 내부에서 DispatchQueue를 쓰는 것보다 이 커스텀 뷰를 사용하는 쪽에서 DispathcQueue.main을 사용하여 호출하는것이 좋은 코드
class SomeVC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
func showSomeAnimation() {
// animation...
}
}
let someVC = SomeVC()
DispatchQueue.main.async {
someVC.showSomeAnimation()
}
'iOS 응용 (swift)' 카테고리의 다른 글
Comments