티스토리 뷰

Lifecycle

뷰 컨트롤러 생명주기는 메소드 세트임

뷰 컨트롤러가 생명주기를 거치는 동안 뷰 컨트롤러에 보내지는 메소드

생명주기 시작은 MVC 생성부터

그 다음엔 아래 상황들이 일어남

1) 연결되고 준비되는 과정

2) outlet 세팅

3) 나타나거나 사라짐(스플릿 뷰 같이 나타났다가 사라짐)

4) 기하학 변화(가로 세로 전환시 화면 변화 등)

5) 메모리 공간 부족 상황(메모리 할당 요청)

 

viewDidLoad

Load : Outlet을 불러온다는 의미

초기화 함수를 넣기 적합

ViewController의 init() 메소드를 오버라이드 하지 않아도 됨

준비도 되었고 Outlet도 설정되어 있음 → UI를 업데이트하는데 최적임

geometry 관련 작업하지 않음 → 뷰의 geometry는 스토리보드에서 정사각형이기 때문에 아무 의미 없는 작업

복잡한 연산이나 집약적인 네트워킹 등도 하지 않음(100% 화면에 나타나는 것을 보장하지 않음)

오직 한번만 호출

   override func viewDidLoad() {
        super.viewDidLoad()
    }

viewWillAppear

화면에 올리기 직전에 호출. 화면에 나올 거라는 것을 확신할 수 있음(복잡한 일을 진행할 수 있음)

복잡한 작업을 다른 thread에서 하게 하는데 활용 가능

View는 데이터나 복잡한 것이 없는 채로 즉시 화면에 나타남(UIThread와 분리 동작)

멀티쓰레딩이 동작하도록 프로그래밍 해야함(정보를 갖고 있지 않은 화면에 UI을 넣는 문제)

    override func viewWillAppear(_ animated: Bool)

viewDidAppear

화면이 나타난 직후에 호출되는 메소드

이미 화면이 나타나 있기에 애니메이션을 시작하기 좋음

    override func viewDidAppear(_ animated: Bool)

viewWillDisappear

viewDidAppear에서 했던 것을 undo(되돌리기)함

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
    }

vieDidDisappear

viewWillAppear()에서 네트워크로부터 가져온 데이터 풀어줄 수 있음

    override func viewDidDisappear(_ animated: Bool)

appear/disappear 함수는 ViewController가 화면에 나타나고 사라질때 반복해서 호출 가능

did-will 함수가 세트를 이루어서 반대 일을 함

Geometry LifeCycle

func viewWillLayoutSubviews()
func viewDidLayoutSubviews()

bound가 변할때마다 혹은 때로 변하지 않을 때도 포함

viewWillLayoutSubviews()와 viewDidLayoutSubviews() 사이에서 모든 오토레이아웃 동작

bound가 변할때만 호출되는 것 아님. 시스템이 어느때나 호출 가능

 

Autorotaion

긴화면에서 세로로 바꾸는 등 bound를 바꿈

viewDidLayoutSubviews()가 다루거나 constraints를 갖게 되는 경우가 많음

Autororation을 다른것과 연관시키는 것 가능함(애니메이션)

아래 함수를 이용해서 회전하는 화면을 직접 조정하는 것이 가능

화면 전환 및 전환조정자(transitionCoordinator)에 클로져로 화면이 회전하면서 애니메이션으로 움직이는 것과 함께 실행

func viewWillTransitionToSize(
    size: CGSize,
    withTransitionCoordinator: UIViewControllerTransition
)

ETC

DidReceiveMemoryWarning

메모리 부족시 불림

앱이 메모리를 많이 쓸 때만 일어남

힙에서 메모리를 많이 먹고 있는 포인터를 날려야함

 

awakeFromNib

매우 초반에 보내짐

준비 전, 아울렛 설정 전.. 매우 초기

오직 스토리보드에서 나오는 경우임

스토리보드에서 나오는 모든 오브젝트에 보내짐

정말 이른 시기에 뭔가 해야할 때 사용. 대부분 초기화는 viewDidLoad에서 처리

 

요약

스토리보드로부터 초기화

awakeFromNib

segue preparation happens(세그웨이 연결되어 준비)

outlet get set

viewDidLoad 

viewWillAppear and viewDidAppear

viewWillDisappear and viewDidDisappear

viewWillLayoutSubviews and viewDidLayoutSubviews

(화면이 꺼지든 켜지든..어떤상황이든 설정 가능. geometry 변화)

 

'iOS > 스탠포드 iOS 강의' 카테고리의 다른 글

[스탠포드iOS] 클로저(Closure)  (0) 2024.03.26
[스탠포드iOS] 메모리 관리  (0) 2024.03.25
[스탠포드iOS] Gestures  (1) 2024.03.22
[스탠포드iOS] Text & Image  (0) 2024.03.20
[스탠포드iOS] View  (0) 2024.03.19
최근에 올라온 글
Total
Today
Yesterday