애플리케이션이 실행된 직후 사용자의 화면에 보여지기 직전에 호출
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
애플리케이션이 최초 실행될 때 호출되는 메소드
func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool
애플리케이션이 InActive 상태로 전환되기 직전에 호출 task 일시정지, 타이머 비활성화, 일시정지(게임)
func applicationWillResignActive(_ application: UIApplication)
애플리케이션이 백그라운드 상태로 전환된 직후 호출
func applicationDidEnterBackground(_ application: UIApplication)
애플리케이션이 Active 상태가 되기 직전, 화면에 보여지기 직전에 호출
func applicationWillEnterForeground(_ application: UIApplication)
애플리케이션이 Active 상태로 전환된 직후 호출
func applicationDidBecomeActive(_ application: UIApplication)
애플리케이션이 종료되기 직전에 호출
func applicationWillTerminate(_ application: UIApplication)
Appdelegate의 역할은?
iOS 12 이전에는 app의 launch, foregrounding, backgrounding 등 App Life-Cycle을 관리하는 책임을 갖고 있었다.
iOS 13 이후로 갖는 역할
1. 앱의 가장 중요한 데이터 구조를 초기화하는 것
2. 앱의 scene을 환경설정(Configuration)하는 것
3. 앱 밖에서 발생한 알림(배터리 부족, 다운로드 완료 등)에 대응하는 것
4. 특정한 scenes, views, view controllers에 한정되지 않고 앱 자체를 타겟하는 이벤트에 대응하는 것.
5. 애플 푸쉬 알림 서브스와 같이 실행시 요구되는 모든 서비스를 등록하는것.
위 사진과 같이 Life-Cycle을 관리하는 책임을 Scene Delegate에게 넘겨주고
Proess Lifecycle역할이 추가된다.
Scene Session이 생성되거나 삭제될 때 AppDelegate에 알리는 두 개의 메소드가 추가됐다.
Scene Session은 앱에서 생성한 모든 scene의 정보를 관리한다.
AppDelegate and SceneDelegate 역할
Delegate 패턴: 객체의 할일을 다른 객체에게 위임하는 것
테이블뷰 - 셀 , 컬렉션뷰 - 셀 의 관계에서 많이 사용하게된다.
테이블뷰 셀에 있는 버튼을 눌렀을때 셀이 추가되거나 삭제되게 하는 경우 -> 셀에 프로토콜과 delegate를 선언하여, TableView가 있는 ViewController에 Delegate Protocol을 상속받아서 해당 셀에 맞는 indexPath를 구하여서 셀을 추가 하거나 삭제한다.
(선택된 셀의 이벤트 및 indexPath 셀정보를 TableView를 가진 ViewController에게 위임해준다.)
ex)
-> 네트워크 처리를 할 때 URLSession 객체를 이용하는데, 이미 만들어져있는 shared 객체에 접근해 메서드를 수행한다.
-> UserDefaults에서 기본적으로 공유하고 있는 standard 저장소에 접근해 쓰고 읽기 위해 만들어져있는 standard 에 접근해 메서드를 수행한다.
이외에도 NotificationCenter.default, UIScreen.main 등 여러 곳에 사용된다.
개인적인 기준은 하나의 객체를 여러 곳에서 사용해야 될 때 사용하는 것이 좋다고 생각했다.