View의 레이아웃 방법을 AutoLayout에서 따뜻한 손 계산으로 하면 성능이 9.26배로 된 이야기

prev



이 기사는 iOS Advent Calendar 2020의 15 일째 기사입니다.
어제는 @zwtin에서 ALAsset의 thumbnail 메소드에서의 이미지 취득은 정지하는 것이 좋다이었습니다.

disclaimer



손 계산을 권하는 의도는 없고, 특수한 상황하에서 계측한 내용입니다

전제


  • 화면 높이의 10 배 정도의 contentView가있는 UIScrollView 레이아웃
  • 캘린더의 날짜를 각각 UILabel로 구성하는 뷰 수가 많은 경우
  • 화면 이미지



  • 변경 내용


  • 화면 전환에 시간이 걸리는 것이 변경의 계기
  • 제목대로 AutoLayout + UIStackView에서 레이아웃 한 코드를 자신의 프레임을 계산합니다

  • 결과



  • 변경 전에는 1.0038초 걸리고 있던 처리가 0.1084초로 끝나게 되었다
  • super.loadView() 직후부터 super.viewDidLayoutSubviews() 직후까지의 시간 측정
  • 번갈아 5 번 실행 한 각 평균
  • 측정 환경은 iPhone 12 Pro Max
  • (원래 iPhone 11 Pro로 검증하고 있었기 때문에 「어? AutoLayout 하지만 비교적 빠른가?」라고 된 것은 비밀)


  • AutoLayout의 솔버는 우수하고, 조금 변경이 들어갔을 때의 차분 갱신등은 강하지만 결국 첫회는 최적화 문제를 풀고 있기 때문에, 정적으로 결정할 수 버리는 경우는 뭐 그렇게 되겠지, 라고 하는 감상

  • 변경 전후의 히에랄 키 비교



  • before


  • after

  • UIScrollView에서 최하층까지 최대 7 단 중첩 된 모든 것이 UIScrollView 바로 아래에 평평하게 배치되었습니다

  • 원래


  • 원래, 이것 정도의 contentSize 의 UIScrollView 를 만들면 UICollectionView 를 사용하는 것이 정답이라고 생각한다
  • 하지만 이런 레이아웃을 제대로하려고하면 귀찮아
  • 20 년분 정도의 데이터를 표시하려고하면 대응하지 않으면 안 될지도 (하지만 스펙의 진화가 더 빠를지도 )


  • 검증 코드



    홍보



    이 기사에서 다룬 변경 내용을 도입한 앱을 App Store에 게시하고 있습니다.
    매일 미소를 만들어 보다 자연스럽고 매력적인 미소를 만드는 트레이닝을 습관으로 할 수 있는 앱입니다.
    코로나 패로 텐션이 내려가는 요즘, 조금이라도 기분을 올리는 일조가 되면 다행입니다.
    원한다면 사용하세요 ~
    다음 내일은 @yum_fishing 님의 기사입니다.

    좋은 웹페이지 즐겨찾기