iOS

3. View의 생명주기 (LifeCycle)

728x90

뷰의 생명주기

react-native도 그렇고 ios도 생명주기가 존재한다.

 

생명주기는 만들어지고, 자기 일을 하고 사라지는 과정을 말한다.

 

각 시기에 무엇을 해야할지 정리하면 이렇다.

  • 뷰의 생명주기
    • 만들어지고 자기 일을 하고 사라지는 과정
    • viewDidLoad
      • UI를 업데이트를 함
      • bound, frame같은 기하학(geometry)은 viewDidLoad에서 할 수 없음
    • viewWillAppear
      • 화면이 나옴을 알 수 있음
      • 시각적으로 처리해야할 일을 하면됨
      • 멀티쓰레딩으로 ui가 집어넣어짐 - 네트워크가 느리다고 버튼이 클릭되면 안되지 않슴
      • 로딩화면을 보여줄수도 있음
      • 여기에도 geometry는 넣지 않음
    • viewDidAppear
      • 애니메이션을 처리하기 좋은 곳임
    • viewWillDisappear
      • 여기서 애니메이션을 멈추거나, 자이로 같은걸 멈추거나함
    • viewDidDisappear
      • 가져온 네트워크를 풀어줌
      • 시스템 자원을 계속해서 쓰고 싶지않을 때
    • viewWillLayoutSubviews()
    • viewDidLayoutSubviews()
      • ios가 필요에 따라 여러번 호출 할 수 있음
      • bound이 변할 때 호출되는 생명주기
      • 여기서 bound, frame같은 기하학(geometry)를 컨트롤함
      • 보통은 constraints로 지정하기 때문에 잘 쓸 일은 없음
      • 애니메이션 동작을 위해 화면 중간에 그려지기도 하는데 다그려지면 이 함수가 호출되기도 함 꼭 bound가 변할 때 이 함수가 동작하는건 아님
    • Autorotation
      • viewWillTransition
      • 세로, 가로 변경될 때 애니메이션으로 움직이는데 이 라이프사이클로 컨트롤이 가능함
    • didReceiveMemoryWarning
      • 메모리 이슈가 있을 때
    • awakeFrombNib
      • 스토리 보드로부터 그려졌을 때 처음 호출되는 얘임
      • 굉장히 이른시기에 뭔가를 해줘야 할 때 사용되는 얘
      • 보통은 여기에 뭔갈 하지않음 viewDidLoad, viewWillApear에 쓰지

 

전 글에서 설명한 bound, frame 같은 View 표시를 위한 속성들이 viewDidLoad, viewWillAppear에서는 가져 올 수가 없다.

viewDidLayoutSubviews 에서 이런 값들을 가져와서 사용을 하는데 보통은 constraint를 사용해서 크기를 지정하기 때문에 잘 사용 할 일은 없다. 근데 개발을 하다보니 해당 뷰의 전체 크기를 가져와서 그 크기에 해당하는 작업을 할 때가 종종있어서 lazy var를 사용해서 처리를 했었는데 다른 방법을 생각해 봐야겠다.

private lazy var colorView: UIImageView = {
    let iv = UIImageView()
    //iv.backgroundColor = .systemPurple
    iv.clipsToBounds = true
    iv.layer.cornerRadius = frame.width / 2
    return iv
}()

 

 

 

 

 

 

 

 

반응형