뷰는 이러한 생명주기를 갖는다.
loadView
- 뷰를 만드는 역할
viewDidLoad
- 뷰의 로딩이 완료 되었을 때 시스템에 의해 자동으로 호출되기 때문에
일반적으로 리소스를 초기화하거나, 초기화면을 구성하는 용도로 사용한다.
- 화면이 처음 만들어 질때 한 번만 실행된다.
-뷰의 컨트롤러가 메모리에 로드되고 난 후에 호출된다.
viewWillAppear
- 뷰가 이제 나타날거라는 신호를 컨트롤러에게 알리는 역할
- viewWillAppear과 다른점은 내비게이션뷰에서 이동했던 화면에서 다시 첫화면으로 돌아올 때
첫화면에서는 viewWillAppear 부터 시작한다. 왜냐하면 우리는 화면을 이동했을 뿐 첫화면을 나가지 않았기 때문!
즉 첫화면은 계속 로드된 상태라는 것이다.
viewDidAppear
- 뷰가 나타났다는 것을 컨트롤러에게 알리는 역할
- 화면에 적용될 애니메이션을 그려준다.
- 화면이 나타난 직후에 실행
viewWillDisappear
뷰가 사라지기 직전에 호출되는 함수
뷰가 삭제되려고하는 것을 뷰 컨트롤러가 통지한다
viewDidDisappear
뷰 컨트롤러가 뷰가 제거되었음을 알려줌다
+ Unwind하면 deinit이 뜨는 걸 확인해보자
unwind?
앱에서 한 화면에서 다른 화면으로 쭉 넘어가다가 첫화면으로 돌아가고 싶어서 마지막화면 버튼에 첫화면을 연결지어 넘어가주게하면
스택에 뷰가 쌓이게 된다. 그럼 앱이 느려질 수 있다. 그렇다고 마지막 화면에서 계속 back버튼을 누르면서 홈화면으로 갈 수도 없다(back버튼을 누르면 현재 뷰는 deinit으로 메모리에 쌓이지 않는다. 그리고 back버튼을 누르며 갈 수 있지만 100개의 화면 앞에 홈이 있는데 그럼 99번 뒤로가기 뒤로가기...지옥에 퐁당)
unwind를 이용하면 쌓인 뷰들을 스택에서 빼내고 다시 처음 뷰로 돌아갈 수 있다.
1. 첫 화면의 뷰컨트롤러에 아래 함수를 작성한다(바인딩해주지 않고 그냥 작성만 한다)
@IBAction func unwindToA(_ segue: UIStoryboardSegue) {}
2. 버튼에 해당 기능을 넣고 싶다면 버튼을 클릭하고 마우스 우클릭을 쭉 당겨서 Exit에 드래그앤 드랍을 한 뒤 unwind를 선택하면 그 버튼을 눌렀을 때 돌아가고 싶은 화면으로 가게 된다.
아래 영상처럼 화면을 두개만 만들고 두번째화면에서 다시 첫번째 화면으로 돌아가는 버튼을 만들어줬다
이렇게 서로 화면을 호출하면 스택이 계속 쌓일 것이다.
뷰의 생명주기 및 Unwind가 어떻게 이뤄지는지 알 수 있는 영상이다.
로지텍 버티컬 마우스와 키보드를 샀다.
근데 애플이 더 좋은 것 같다.
왜 한영을 인식을 못하고...제스처를 못하는거야...
'🌱' 카테고리의 다른 글
버튼안에 여백주기 (0) | 2022.07.18 |
---|---|
init?(rawValue: String) (0) | 2022.07.16 |
코드리뷰 (0) | 2022.07.16 |
Ing, ed (0) | 2022.07.14 |
[iOS] Storyboard Reference (0) | 2022.07.13 |