본문 바로가기

App Dev

[IOS] IOS 앱 생명주기

앱 생명주기

 

앱 생명주기(ViewController Life Cycle)

: 앱 생명주기란 화면에 보여졌다가 사라지기까지의 과정을 말한다. 

앱의 현재 상태에 따라 수행할 수 있는 작업과 수행할 수 없는 작업이 결정된다. 가령 Forground App은 사용자의 시선을 끌기 때문에 CPU 를 포함한 시스템 리소스보다 우선 순위가 높다고 볼 수 있다. 이와 반대로 Background App 은 가능한 적은 작업을 수행해야 하며 화면 밖에 있기에 아무 작업도 수행하지 않는 것이 좋다. 

 

위의 그림을 참고하며 흐름도에 따라 가보자.

 

 

loadView()

: View 를 메모리에 올리는 과정을 말한다.

- 스토리보드로 만들어진 화면을 호출하는 것이 아닌 -> 내가 만든 코드로 이동할 것이라는 의미

- 코드로 구현했을 경우에만 재정의하면 된다.

- View 를 Load 시키거나 만들고 뷰 속성을 부여한다.

- 컨트롤러가 관리하는 View 를 "만드는" 역할을 한다.

- 이 메서드는 super 로 호출하면 절대 안 된다.

- View 를 추가로 초기화하려면 -> viewDidLoad() 메서드에서 초기화해야 한다.

override func loadView() {
	view = LoginView()  // 뷰를 교체하는 시점
  //super.loadView() // 재정의해서, 구현할때 상위호출 필요하지 않음(하면 안됨)
 }

 

viewDidLoad()

: 앱의 화면에 들어오면 가장 먼저 실행시키는 함수 (시스템에 의해 자동 호출됨)

 

- > 스토리 보드 상의 View 들과의 연결이 끝난 시점을 말한다.

 

  • 화면이 처음 만들어질 때 "한 번만" 실행된다.
  • ViewController 가 View 하이어아키를 메모리에 로드한 후 호출된다.
  • View 계층이 nib 파일에서 로드되었는지 loadView() 메서드에서 프로그래밍 방식으로 생성되었는지 여부에 관계없이 호출된다.
  • 일반적으로 nib 파일에서 로드된 뷰에 대해 추가 초기화를 수행하려면 이 방법을 재정의한다.
  • 인터넷에서 데이터를 가져오는 역할을 수행한다.
override func viewDidLoad() {
   super.viewDidLoad()   
}

 

viewWillAppear()

: 뷰가 화면에 나타날 때마다 계속 호출된다.

  • 뷰가 화면에 나올 때 마다 “계속 호출” 된다.
  • View 가 View hierarchy 에 추가되며 화면에 보이기 직전에 계속 호출된다.
  • 다른 뷰에서 갔다가 다시 돌아오는 상황에, 어떤 작업을 처리하고 싶을 경우 사용함
  • View와 관련된 추가적인 초기화 작업을 수행한다.
// If true, the view is being added to the window using an animation.
override func viewWillAppear(_ animated: Bool) {
  super.viewWillAppear(animated)
}

 

viewDidAppear()

 

: 스크린에 뷰가 나타난 직후에 호출된다.

  • 뷰 컨트롤러의 뷰가 View 계층에 추가가 완전히 된 후 호출된다.
  • 뷰의 초기 모양과 관련된 애니메이션을 완료한 후 호출된다.
override func viewDidAppear(_ animated: Bool) {
  super.viewDidAppear(animated)
}

 

viewWillDisAppear()

: 스크린 뷰가 사라지기 전에 호출

→ 사실 메모리에서 없어진 것은 아니다.

// 뷰가 사라지기 전
override func viewWillDisappear(_ animated: Bool) {
	super.viewWillDisappear(animated)
}

 

viewDidDisAppear()

: 스크린 뷰가 사라진 후에 호출

→ ViewController 가 View 가 제거되었다고 알려준다.

// 뷰가 사라지기 전
override func viewDidDisappear(_ animated: Bool) {
	super.viewDidDisappear(animated)
}

 

deinit

 

: 메모리에서 내려간다.

 

deinit { }

 

 


ViewController 간의 데이터 전달

(1) 직접 전달 방식(동기 방식) : 데이터를 직접 넘겨주는 방식

  • present, push 시 Property 에 접근후 넘겨주는 방식
  • Segue prepare 메서드를 활용하여 데이터를 넘겨주는 방식
  • Protocol / Delegation 을 활용하여 데이터를 넘겨받는 방식
  • Closure 를 활용해서 데이터를 넘겨받는 방식
  • NotificationCenter 를 활용해서 데이터를 넘겨받는 방식

 

(2) 간접 전달 방식(비동기 방식) : 데이터를 다른 곳에 저장한 후, 필요 시 가져다 쓰는 방식

  • AppDelegate 활용
  • UserDefaults 사용하기
  • CoreData OR Realm 활용하기

 

 

 

 

'App Dev' 카테고리의 다른 글

[iOS] MVC/MVVM 패턴  (0) 2022.12.07
[IOS] CRUD in swift _ CoreData  (0) 2022.12.02
[iOS] 동기 및 비동기  (0) 2022.11.28