티스토리 뷰
오늘은 레이아웃을 다루는 메서드에 대해서 (아래 링크 의역 및) 정리해보려 합니다.
layoutIfNeeded vs setNeedsLayout
먼저, iOS앱이 시작되면 시스템 객체는(UIApplication) 메인 스레드에서 메인 런 루프를 돌기 시작합니다.
메인 런 루프는 (예: 유저의 터치) 이벤트를 처리하고 뷰 기반 인터페이스에 대한 업데이트를 처리합니다.
터치, 위치 업데이트, 모션 및 멀티 미디어 제어와 같은 이벤트가 발생하면,
메인 런 루프는 이벤트에 대한 적절한 트리거를 찾아서 적절한 메서드를 호출하는 등 작업을 수행합니다.
이때 모든 이벤트가 처리되고 제어(control)가 메인 런 루프로 돌아가는 시점에 업데이트할 때가 업데이트 주기입니다.
여기서 나오는 업데이트 주기가 아래에서 말하는 업데이트 주기가 됩니다.
참고)
setNeedsLayout
setNeedsLayout메서드는 업데이트 주기가 되면 해당 뷰와 모든 서브 뷰를 다시 그리고 레이아웃하도록 시스템에 알립니다.
이 메서드는 비동기적으로 동작합니다. 메서드가 즉시 완료되고 리턴되기 때문입니다.
하지만 나중에 다시 그리고 레이아웃하기 때문에 업데이트 주기가 언제인지 알 수 없습니다.
애플 문서에 따르면 :
뷰와 서브 뷰 레이아웃을 조정하길 원한다면 애플리케이션의 메인 스레드에서 이 메서드를 호출하도록 합니다.
이 메서드는 요청 기록하고 즉시 리턴합니다.
이 메서드는 강제로 즉시 업데이트하지 않으며, 다음 업데이트 주기를 기다리기 때문에
여러 뷰들이 업데이트 되기 전에 여러 뷰들의 레이아웃을 무효화하는데 사용할 수 있습니다.
이 메서드를 사용하면 모든 레이아웃 업데이트를 하나의 업데이트 주기로 통합할 수 있으며 일반적으로 성능이 더 좋습니다.
layoutIfNeeded
반대로 layoutIfNeeded메서드는 동기적으로 동작합니다.
이 메서드는 업데이트 주기를 기다리지 않고 즉시 해당 뷰와 모든 서브 뷰를 다시 그리고 레이아웃하도록 시스템에 요청합니다.
이 메서드에 대한 호출이 완료되면 메서드 호출 이전에 기록된 모든 변경 사항을 기반으로 이미 레이아웃이 조정되고 그려집니다.
보류 중인 레이아웃 업데이트가 없으면 종료합니다.
UIView의 setNeedsLayout()은 다음 업데이트 주기가 되면 현재 뷰 및 서브 뷰를 다시 그리도록 시스템에 지시합니다.
반면 layoutIfNeeded()는 다음 업데이트 주기를 기다리지 않고 즉시 다시 현재 뷰 및 서브 뷰를 다시 그리도록 시스템에 지시합니다.
setNeedsLayout | layoutIfNeeded |
비동기적 | 동기적 |
업데이트 주기 | 즉시 |
resource:
https://developer.apple.com/documentation/uikit/uiview/1622507-layoutifneeded
https://developer.apple.com/documentation/uikit/uiview/1622601-setneedslayout
'Tech > iOS' 카테고리의 다른 글
NSLineBreakMode byTruncatingHead,Tail,Middle비교 (0) | 2020.09.09 |
---|---|
CollectionView 살펴보기4 (UICollectionViewCell) (0) | 2020.09.06 |
UICollectionView 살펴보기3 (UICollectionViewFlowLayout, UICollectionViewDelegateFlow (0) | 2020.09.01 |
UICollectionView 살펴보기2 (UICollectionViewLayout) (0) | 2020.08.30 |
UICollectionView 살펴보기1 (0) | 2020.08.25 |
- Total
- Today
- Yesterday
- 딥러닝
- swift5
- SWIFT
- objective-c
- ReactiveX
- 책 후기
- leetcode
- 머신러닝
- 문자열
- Algorithm
- ARC
- iOS SwiftUI
- 스위프트UI
- wwdc
- Xcode
- rxswift
- 독서
- 알고리즘
- 애니메이션
- stanford SwiftUI
- Deep learning
- string
- RX
- objc
- 책
- Animation
- 책 추천
- 스위프트
- swiftUI
- ios
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |