TIL(Today I Learned)

3월 15일(월)

학습내용

  • Kahoot
    • REpresentational State Transfer 방식으로 구현하는 애플리케이션 프로그래밍 인터페이스는 REST API이다.
    • REST는 URI와 HTTP 프로토콜을 이용해 자원을 제어한다.
    • REST API에서 부분 업데이트를 위해 주로 사용하는 HTTP 메서드는 PATCH이다.
    • HTTP 요청의 구성요소는 Header, Body 등이 있다.
    • 100번 회원의 회원정보를 가져오는데 적절한 route는 ‘/members/100’이다. (URI는 소문자로 구성되는 것이 좋고, 맨 뒤가 슬래쉬로 끝나면 좋지 않다.)
    • 100번 회원의 회원정보를 업데이트 하는데 적절한 route는 ‘/members/100’이다.
  • View Drawing Cycle
    • Draw는 가장 비싼(자원이 많이 소모되는) 연산이다.
    • 그래서 한번 Draw가 되면 다음 Draw는 하지 않도록 하는 식으로 구현해서 리소스를 절약할 수 있다. (필요할때만)
    • 전체 호출 순서 : requiresConstraintBasedLayout - loadView - viewDidLoad - viewWillAppear - updateConstraints - intrinsicContentSize - updateViewConstraints - viewWillLayoutSubviews - layoutSubviews - viewDidLayoutSubviews - drawRect - viewDidAppear
    • view의 drawing cycle은 아이폰은 1초에 60번 아이패드는 1초에 120번 반복된다.
    • Constarints는 부모에서 자식 순으로 업데이트가 되고, Layout은 자식에서 부모 순으로 이루어지며, Display도 자식에서 부모 순으로 이루어진다.
    • layout이 변경되면, draw가 실행된다.
    • draw 매세드 내에서 Core Graphics을 이용해서 다양한 것을 그릴 수 있다.

문제점/고민한점

  • 야곰이 수업시간에 보여준 코드에서 animate 메서드의 클로저 파라미터 외부에서 constraints를 바꾸고, animate 메서드의 클로저 파라미터 내부에 layoutIfNeeded()를 호출할 때와 호출하지 않을 때 차이가 나타나는 이유는 무엇일까?

해결방법

  • animate 메서드의 클로저 파라미터 내부에 layoutIfNeeded()를 호출하면 애니메이션이 진행되는 동안 서서히 constraints가 변경이 되었고, 호출하지 않으면 애니메이션이 시작되기 전에 constraints가 변경이 된다. layoutIfNeeded()를 애니메이션 클로저 내부에서 실행했기 때문에 애니메이션이 진행되는 동안 서서히 레이아웃이 변화하는 것이고, layoutIfNeeded()를 실행하지 않으면 애니메이션과 별개로 다음 drawing cycle이 왔을 때 즉시 레이아웃 변화를 반영하기 때문에 이러한 차이가 생긴 것 같다.

참고

https://developer.apple.com/library/archive/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/WindowsandViews/WindowsandViews.html#//apple_ref/doc/uid/TP40009503-CH2-SW9