비용이 많이 드는 메서드이고, 때문에 직접 호출하는 것은 지양된다
layoutSubviews를 유도할 수 있는 여러 방법이 존재한다 -> layoutIfNeeded / setNeedsLayout
이는 일종의 update cycle에서 layoutSubviews의 호출을 예약하는 행위라고 할 수 있다
Use this method to force the view to update its layout immediately. When using Auto Layout, the layout engine updates the position of views as needed to satisfy changes in constraints. Using the view that receives the message as the root view, this method lays out the view subtree starting at the root. If no layout updates are pending, this method exits without modifying the layout or calling any layout-related callbacks.
이 방법은 뷰가 레이아웃을 즉시 업데이트하도록 합니다. 오토레이아웃을 사용하는 경우 레이아웃 엔진은 constraints의 변경 사항을 충족하기 위해 뷰 위치를 업데이트합니다. 이 방법은 메시지를 수신하는 뷰를 루트뷰로 사용하여 뷰 하위 트리를 루트부터 배치합니다. 보류 중인 레이아웃 업데이트가 없는 경우 이 메서드는 레이아웃을 수정하거나 레이아웃 관련 콜백을 호출하지 않고 종료됩니다.
Call this method on your application’s main thread when you want to adjust the layout of a view’s subviews. Because this method does not force an immediate update, but instead waits for the next update cycle, you can use it to invalidate the layout of multiple views before any of those views are updated. This behavior allows you to consolidate all of your layout updates to one update cycle, which is usually better for performance.
뷰의 서브뷰 레이아웃을 조정하려면 프로그램의 기본 스레드에서 이 메소드를 호출하십시오. 이 방법은 즉시 업데이트를 수행하지 않고 대신 다음 업데이트 주기를 기다리기 때문에 뷰가 업데이트되기 전에 여러 뷰의 레이아웃을 무효화할 수 있습니다. 이 동작을 통해 모든 레이아웃 업데이트를 한 번의 업데이트 주기로 통합할 수 있으므로 일반적으로 성능이 더 좋습니다.
수동으로 layoutSubviews()
를 예약하는 행위이이다
layoutIfNeeded는
동기적
으로작동하는 메서드이다setNeedsLayout은
비동기적
으로 작동한다참고
https://baked-corn.tistory.com/105
RunLoop가 무엇일까? https://babbab2.tistory.com/68