투케이2K

7. (ios/swift) 생명 주기 life cycle 라이프 사이클 관리 실시 - AppDelegate , SceneDelegate , ViewController 본문

IOS

7. (ios/swift) 생명 주기 life cycle 라이프 사이클 관리 실시 - AppDelegate , SceneDelegate , ViewController

투케이2K 2021. 10. 16. 21:01

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT


[소스 코드 : AppDelegate]

//
//  AppDelegate.swift
//  testUI
//
//  Created by lotecs on 2021/10/16.
//

import UIKit

@main
class AppDelegate: UIResponder, UIApplicationDelegate {



    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        print("")
        print("===============================")
        print("[AppDelegate >> didFinishLaunchingWithOptions]")
        print("[설명 : 앱 프로세스 완료 및 앱 실행 실시]")
        print("===============================")
        print("")
        
        // [스레드 시간을 발생시켜 로딩화면 지연 실시 - 3초]
        Thread.sleep(forTimeInterval: 3.0)
        
        return true
    }

    // MARK: UISceneSession Lifecycle

    func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
        print("")
        print("===============================")
        print("[AppDelegate >> configurationForConnecting]")
        print("[설명 : Scene 만들기 위한 구성 객체 반환 : 스토리보드 , info]")
        print("===============================")
        print("")
        return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
    }

    func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
        print("")
        print("===============================")
        print("[AppDelegate >> didDiscardSceneSessions]")
        print("[설명 : Scene 구성 객체 해제 실시]")
        print("===============================")
        print("")
    }
}

 

 

[소스 코드 : SceneDelegate]

//
//  SceneDelegate.swift
//  testUI
//
//  Created by lotecs on 2021/10/16.
//

import UIKit

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?


    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        print("")
        print("===============================")
        print("[SceneDelegate >> willConnectTo]")
        print("[설명 : UI창 선택적 구성 및 제공된 UI창에 Scene 연결]")
        print("===============================")
        print("")
        
        guard let _ = (scene as? UIWindowScene) else { return }
    }

    func sceneDidDisconnect(_ scene: UIScene) {
        print("")
        print("===============================")
        print("[SceneDelegate >> sceneDidDisconnect]")
        print("[설명 : 시스템에 의해서 Scene 해제 : background 상태 및 session 삭제]")
        print("===============================")
        print("")
    }

    func sceneDidBecomeActive(_ scene: UIScene) {
        print("")
        print("===============================")
        print("[SceneDelegate >> sceneDidBecomeActive]")
        print("[설명 : Scene 활성화 및 사용자 이벤트에 응답 실시]")
        print("===============================")
        print("")
    }

    func sceneWillResignActive(_ scene: UIScene) {
        print("")
        print("===============================")
        print("[SceneDelegate >> sceneWillResignActive]")
        print("[설명 : Scene 활성 상태 해제 및 사용자 이벤트에 대한 응답 중지]")
        print("===============================")
        print("")
    }

    func sceneWillEnterForeground(_ scene: UIScene) {
        print("")
        print("===============================")
        print("[SceneDelegate >> sceneWillEnterForeground]")
        print("[설명 : Scene 포그라운드 실행]")
        print("===============================")
        print("")
    }

    func sceneDidEnterBackground(_ scene: UIScene) {
        print("")
        print("===============================")
        print("[SceneDelegate >> sceneDidEnterBackground]")
        print("[설명 : Scene 백그라운드 실행]")
        print("===============================")
        print("")
    }
}

 

 

[소스 코드 : ViewController]

//
//  MainController.swift
//  testUI
//
//  Created by lotecs on 2021/10/16.
//

import UIKit

class MainController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        print("")
        print("===============================")
        print("[MainController > viewDidLoad() : 뷰 로드 실시]")
        print("===============================")
        print("")
    }
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        print("")
        print("===============================")
        print("[MainController > viewWillAppear() : 뷰 로드 완료]")
        print("===============================")
        print("")
    }
        
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        print("")
        print("===============================")
        print("[MainController > viewDidAppear() : 뷰 화면 표시]")
        print("===============================")
        print("")
        
        // [뷰 컨트롤러 포그라운드, 백그라운드 상태 체크 설정 실시]
        NotificationCenter.default.addObserver(self, selector: #selector(checkForeground), name: UIApplication.willEnterForegroundNotification, object: nil) // 포그라운드
        
        NotificationCenter.default.addObserver(self, selector: #selector(checkBackground), name: UIApplication.didEnterBackgroundNotification, object: nil) // 백그라운드
        
        // [포그라운드 처리 실시]
        checkForeground()
    }
        
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        print("")
        print("===============================")
        print("[MainController > viewWillDisappear() : 뷰 정지 상태]")
        print("===============================")
        print("")
    }
        
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        print("")
        print("===============================")
        print("[MainController > viewDidDisappear() : 뷰 종료 상태]")
        print("===============================")
        print("")
        
        // [뷰 컨트롤러 포그라운드, 백그라운드 상태 체크 해제 실시]
        NotificationCenter.default.removeObserver(self, name: UIApplication.willEnterForegroundNotification, object: nil)
        NotificationCenter.default.removeObserver(self, name: UIApplication.didEnterBackgroundNotification, object: nil)
    }
    
    // [포그라운드 및 백그라운드 상태 처리 메소드 작성]
    @objc func checkForeground() {
        print("")
        print("===============================")
        print("[MainController > checkForeground() : 뷰 컨트롤러 포그라운드]")
        print("===============================")
        print("")
    }
    @objc func checkBackground() {
        print("")
        print("===============================")
        print("[MainController > checkBackground() : 뷰 컨트롤러 백그라운드]")
        print("===============================")
        print("")
    }

}

[결과 출력]


 

반응형
Comments