0%

191121-swift-App Life Cycle

App Life Cycle

  • Model: 데이터를 저장하고 사용하는내용 (유저정보, 게임데이터, 지도정보, 각종데이터를 다루기위한 코드들)
  • View: 아이폰앱에서 우리가 표현하고싶은 View, 사용자가 직접보게되는 화면구성에 사용되는 Dbject, 한개 또는 여러개가 될수도 있다.
  • Controller: View와 Model사이의 중간 전달자역할. Model이 View에게 직접 전달하는것이아니고 Controller통해 전달을 한다.

Main run loop

  • 터치나, 줌인 줌아웃을 할때 먼저들어온게 먼저 처리하는것, 순환하면서 반복 이벤트가 발생하는것을 체크 한다. 여러가지 작업들을 처리함.

어플에 전달을하고 코어에 전달하고 os에전달하는 과정

State changes in iOS app

  • 라이프 사이클: 앱의생명주기, 뷰컨트롤러생명주기, 뷰의생명주기 등 (시작과 끝이 존재함)
  • Not running: 실행되지 않았거나, 시스템에 의해 종료된 상태
  • Foreground: 사용하는 앱의 상태
  • Inactive: 앱을 실행할때 잠깐 거치기도하지만, 전화등으로 앱이 잠깐멈출때도 해당 다른 앱으로 인해 앱이 멈춰져야하는 상태일때 Inactive로 전환된다.
  • Active: 현재 아이폰화면에서 어플리케이션이 실제로 활동하는 상태
  • Background: 동작은 혀용되는 상태(음악, 지도 등)
  • Suspended: 더이상 쓸 필요가 없거나 메모리가 부족해서 종료해야 하는 상태
  • 메모리에 남아는 있지만 동작(실행)은 하지않음. 담아는 두고 실행은 안시킴
  • Suspended상태에서 강제종료가 되면 다시실행할 때 처음부터 다시 런처화면을 띄운다.(Suspended -> Not running상태)
  • 이전 화면이 바로 올라오는 상태는 Suspended상태이고, Background상태일때에는 이전상태 그대로 올라온다.

Execution states for Apps

  • 어떤시점마다 처리할 것이 있다면 알려주고 그안에서 작업할수있는 메서드를 제공
  • 실행된직후 화면에 보이기 직전에 앱에서 호출되는 메서드(초기화작업)

Launch time

  • Launch time: 함수의 실행 이전에 시스템 실행 내용
  • Your code: 내가 신경써야하는 부분
  • 최종 초기화지점: didFinishLaunchingWithOptions
  • 프로젝트내에서는 메서드나 함수만 작성이 가능하다. 값은 할당할수있는데 프린트는 불가

->왜? 앱을실행시 메인함수가 먼저 실행되고 넘어가는데 메인을 생략하기 때문에 바로실행시키는 함수는 불가. 만약 사용시 탑레벨로 인한 오류가 발생하는데 탑이 main( )이여서 생략되어있기 때문에 불가함

  • @UIApplicationMain = main( ) 메인함수를 대신한다.(따로 main( )만들지 않아도됨 )
  • Main( ): 앱이 실행된다는 것 (앱의시작점), 가장먼저 호출, 메인함수로부터 모든게 시작 내가 만든 모든앱들이 여기를 통해 실행. 가장 기본이되는 정보를 넘겨줘서 시스템이 앱을 구동할수있는 역할.
1
2
3
4
5
6
7
8
9
10
11
12
13
1. SceneDelegate 사용할때

- ios 13 미만: 현업이나 개인앱낼때
- @available(iOS 13, *) : 붙여주면 13이상일때만 반응하고 아니면 무시함
- AppDelegate에 `var window: UIWindow?` 추가
- ios 13 이상 + SceneDelegate 사용기준: 공부할 때
- AppDelegate, SceneDelegate 무시

2. SceneDelegate 사용하지 않을때 (AppDelegate만 사용할 때)

- SceneDelegate 파일자체를 삭제,
- AppDelegate에서 `MARK: UISceneSession Lifecycle`(scene관련) 메서드삭제
- info.plist에서 application scene manifest키 삭제