Skip to main content

IOS

· 3 min read

View Controller Lifecycle

  • 뷰 컨트롤러는 라이프 라이클을 가지고 있음

  • 인스턴스 생성과 준비 그리고 Outlet 설정이 끝나면 viewDidLoad 가 불린다.

  • viewDidLoad

    • 초기화 코드를 넣기에 좋은 장소
    • Update UI 하기 좋은 장소
    • Geometry 는 아직 세팅되어 있지 않다(its bounds)
    • 무엇가 확실히 나타나지 않는 것들은 viewDidLoad에 설정하지 않는다(복잡한 로직이나 네트워크 등)
    • 한 번만 호출 된다(중요)
  • viewWillAppear

    • 화면을 올리기 직전에 호출됨
    • 복잡한 로직을 실행하기 좋은 곳이다.
  • viewDidAppear

    • 화면이 나타는 직후에 호출되는 메소드
    • animation을 시작하기 좋은 곳
  • viewWillDisappear

    • viewDidAppear()에서 했던 것들은 undo(되돌리기)하게 될 곳
    • stop animation
  • viewDidDisappear

    • 네트워크에서 가져온 데이터를 풀어줄 수 있음
  • Geometry changed

    • viewWillLayoutSubviews()
    • viewDidLayoutSubviews()
    • View에 상태에 따라 Bounds가 변함 -> navigationBar는 뷰 위에 있어서 변하지 않지만, TabBar는 뷰와 겹쳐서 Bound가 변한다.
  • viewWillTrasitionToSize

    • 유저가 디바이스를 가로.세로로 전환할때 자동으로 bound를 바꾸어 줌
    • 개발자가 viewWillTrasitionToSize() 함수를 사용하여 수동으로 조작할 수도 있음
  • didReceiveMemoryWarning

    • 메모리 부족 상황에서는 didReceiveMemoryWarning 메소드가 호출된다.
  • awakeFromNib

    • 스토리보드로 부터 나오는 모든 오브젝트를 이 메소드로 보냄
    • 아웃렛이 세팅되기 전에 발생
  • 결론
  1. Instantiated(from storyboard usually)
  2. awakeFromNib
  3. segue preparation happens
  4. outlets get set
  5. viewDidLoad
  6. These pairs will be called eath time your Controller's view goes on/off screen ...
    • viewWillAppear and viewDidAppear
    • viewWillDisapper and viewDisDisappear
  7. These "geometry changed" methods might be called at any time after viewDidLoad
    • viewWillLayoutSubviews
    • viewDidLayoutSubviews
  8. If memory gets low, you might get ...
    • didReceiveMemoryWarning