수행 내용

  • iOS View Life Cycle 기초 학습

학습 내용

iOS View Life Cycle

Life Cycle의 의미?

화면에 보이는 것을 View라고 표현한다. 예를 들어 화면에서 항목을 선택하면 새로운 화면이 나타난다. 이러한 과정에서 화면이 태어나고 사라지기(죽기까지)의 과정을 Life Cycle이라 표현한다.

나타난다 (태어난다)사라진다 (죽는다)의 기준은 무엇일까?

  • 타입이 태어났다: 메모리에 올라갔다 (데이터가 활동할 준비가 되었다)
  • View의 생명주기: View Instance의 생명 주기, View Instance가 메모리에 올라갔다 (태어났다), 메모리에서 사라진다 (죽는다).

View의 생명주기 관리는 View Controller가 한다. UIViewController 문서를 참고하자.

View Management

View ControllerView를 가지게되는 순간 (View가 탄생하는 시점)은?

뷰 컨트롤러에서 loadView()메서드를 통해 뷰를 불러올 때

View의 상태 변화에 따라 ViewController에 있는 특정 메서드를 호출한다.

  • viewWillAppear
  • viewDidAppear
  • viewWillDisappear
  • viewDidDisappear

이들은 나눈 기준은?

뷰의 상태는 두 가지가 있다. 보인다. 안보인다. 이 시점에 기반하여 위의 메서드들을 정의해두었다. 그렇다면 우리는 왜 이 시점을 알아야 할까? 왜 상태를 나누어 두었을까?

그 이유는 이벤트가 발생했을 때 반응하기 위한 코드를 준비하기 위함이다. 화면이 나타나고 없어지는 것도 이벤트의 일종이다. View의 자세한 Life Cycle은 아래와 같이 시점별 (시간순)로 정의되어 있다.

  • loadView(): View를 메모리에 로드한다.
  • viewDidLoad(): View가 메모리에 로드되었다(DidLoad).
  • viewWillAppear(): View가 나타날 것이다(WillAppear).
  • viewDidAppear(_:): View가 나타났다(DidAppear).
  • viewWillDisappear(_:): View가 사라질 것이다(WillDisappear).
  • viewDidDisappear(_:): View가 사라졌다(DidDisappear).

    Source: Apple Developer

예시로써, Navigation Controller에서 back 버튼을 통해 머무르던 화면에서 나오면 들어갔던 화면은 메모리에서 해제된다 (viewController type deinit()).

화면 전환

Storyboard segue 활용 시 주의할 점

이전 화면으로 이동하는 기능을 segue로 이어 순방향 segue와 순환되게 구성하면 화면을 들어가고 나갈 때마다 계속 새로운 화면을 만들게 된다. dismiss를 통해 기존 화면으로 돌아가는 기능을 구현하자.

Present modally 활용 시 참고 사항

present modally 효과로 화면을 넘길 때 화면을 일부 덮는 기본 설정full screen으로 설정함에 따라 ViewController의 메서드 작동 양상이 다르다 (상기 언급한 메서드들). 기본 설정은 기존 화면이 살아있기 때문에 애니메이션, 음악 재생이 계속 일어나고, full screen으로 덮으면 기준 view가 사라진다.

그렇다면 음악과 애니메이션은 어디에서 재생하는 것이 좋을까?

  • viewDidload()
  • viewDidAppear() - 여기!
  • viewDidLoad()

viewDidLoad()는 다른 화면에 다녀오면 음악과 애니메이션이 다시 재생되지 않는다.

이처럼 화면 전환에 따라 특정 메서드들의 호출 시점이 다르기 때문에 잘 알고 써야한다!

추가 팁으로는 다른 화면에 다녀올 때마다 새로운 데이터를 업데이트 해주어야 하는 경우 viewWillAppear()에서 처리하도록 한다.

profile
합리적인 해법 찾기를 좋아합니다.

0개의 댓글