• Smooth Scrolling

    • 프레임 드랍의 문제

    • 매 프레임당 당 처리 속도가 16ms를 넘어가면 프레임 드랍이 일어난다.

    • 셀의 라이프 사이클

      • 셀이 재사용되거나 새로 만들어진다.
        • 재사용 되면 prepareForReuse가 호출된다.
      • cellForRowAt
      • willDisplayCell
      • didEndDisplay
    • iOS 10 이상에서는 셀이 스크린을 벗어난다고 해서 바로 didEndDisplay가 호출되지는 않는다. -> 급하게 반대로 스크롤링 하는 경우가 있기 때문.

      • 이 때 화면에서 벗어났다가 다시 들어오면 didEndDisplay의 호출없이 wllDisplayCell이 호출된다.
      • 한번에 여러 셀이 나타나야 할 때 원래는 한꺼번에 처리 했는데, 하나씩 처리하는 것으로 바뀌었다. -> 셀이 순간 안 보일수는 있겠지만, 스크롤 성능은 올라간다.
    • Cell Prefetching(콜렉션 뷰에만 존재)

      • 기본적으로 설정되어 있음

        collectionView.isPrefetchingEnabled = true
        
    • cellForAt에서 무거운 작업

    • willDisplay에서 가벼운 작업

      • prefetch된 셀은 화면에 나오지 않을 수도 있다.
    • 만약 데이터 모델을 계산하는 작업이 비싸다면?

      • 코어데이터 , 네트워킹 등…
      • 이럴때 사용하는 것이 UICollectionViewDatasourcePrefetching -> 무거운 작업을 백그라운드에서 처리가능
        • GCD나 OperationQueue를 사용할 것
      • 로딩 뿐 아니라, 필요 없어진 로드 작업을 캔슬할 수도 있음
        • adaptive한 기술 - 사용자 입력에 따라 범위가 달라진다.
      • 테이블 뷰에도 똑같은 기술을 제공해준다.
  • Improvements to self-sizing cells

    • 기본
      • FlowLayout 내에서 적용됨
      • 0이 아닌 CGSize 제공
      • 실제 셀 크기를 확정하기 위해 다음 테크닉 중 하나를 사용
        • Auto Layout
        • sizeThatFits 오버라이드
        • preferredLayoutAttributesFitting 오버라이드
    • 만약 셀 크기 계산이 어렵다면?
      • layout.estimatedSize = UICollectionViewFlowLayoutAutomaticSize
      • 셀 크기가 유사해야 효과가 좋음
  • Interactive reordering

    • iOS 9에 추가된 API
      • InteractiveMovement가 붙은 메소드들
      • 이 제스처를 활성화하려면 다음 프로퍼티를 활성화하라
    collectionViewController.installsStatndardGestureForInteractiveMovement = true
    
  • PagingSupport - 스크롤뷰를 통해 지원되는 API

    • reordering이 페이징에도 대응하도록 변경
  • UIRefreshControl 지원

    • CollectionView
    • TableView
    • ScrollView까지 지원! -> ScrollView의 프로퍼티로 존재하기 때문에