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
}()
반응형
'iOS' 카테고리의 다른 글
combine - 1. Combine에 관하여 (0) | 2022.03.14 |
---|---|
iOS 동시성 (GCD Grand Central Dispatch) 기본 개념 (0) | 2022.02.07 |
2. View에 관하여 (Frame, Bounds) (0) | 2022.02.04 |
1. 계산기 코드로 보는 MVC 패턴 (0) | 2022.02.01 |
Stanford iOS 한글자막 강의 - MVC 패턴 (0) | 2022.02.01 |