UIKit

UIKit | ViewController 생명 주기

ziziDev 2024. 7. 12. 19:51
반응형

ViewController 생명 주기

 

 

import UIKit

class ViewController: UIViewController {
    
    lazy var nextViewButton: UIButton = {
        let button = UIButton()
        button.setTitle("페이지 이동", for: .normal)
        button.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)
        button.backgroundColor = .systemBlue
        button.setTitleColor(.white, for: .normal)
        button.titleLabel?.font = .boldSystemFont(ofSize: 30)
        button.translatesAutoresizingMaskIntoConstraints = false
        return button
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        print("viewDidLoad")
        configurationUI()
    }
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        print("viewWillAppear")
    }
    
    override func viewIsAppearing(_ animated: Bool) {
        super.viewIsAppearing(animated)
        print("viewIsAppearing")
    }
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        print("viewDidAppear")
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        print("viewWillDisappear")
    }
    
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        print("viewDidDisappear")
    }
    
    private func configurationUI() {
        view.backgroundColor = .white
        view.addSubview(nextViewButton)
        
        
        NSLayoutConstraint.activate([
            nextViewButton.widthAnchor.constraint(equalToConstant: 200),
            nextViewButton.heightAnchor.constraint(equalToConstant: 120),
            nextViewButton.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            nextViewButton.centerYAnchor.constraint(equalTo: view.centerYAnchor)
        ])
    }
    @objc
        private func buttonTapped() {
            self.navigationController?.pushViewController(SecondViewController(), animated: true)
            print("======== 화면 전환 ========")
        }
   
}

 

다음 화면 전환

 

화면전환 후 다시 되돌아갔을 때

 

 

 

The Role of View Controllers

 

뷰 컨트롤러

UI 관리 / 데이터와의 상호작용 / UI 전환

 

View Management

View Controller의 가장 중요한 역할은 뷰 계층을 관리하고 있고 뷰 컨트롤러에는 모든 컨텐츠를 가지고 있는 Root View가 있고 해당 루트에는 컨텐츠를 표시하는데 필요한 뷰들이 있습니다

뷰 컨트롤러는 항상 루트 뷰 참조를 유지하고 있고 각각의 뷰는 그 아래 SubView에 대한 참조를 유지하고 있습니다

 

"일반적으로 outlet을 사용하는데 이 oulet은 스토리보드로부터 뷰가 로드될 때 자동으로 뷰에 연결이 일반적"

스토리보드에서 뷰가 로드될 때 실제로 뷰 객체에 자동으로 연결되어있음

 

 

 

 

뷰 컨트롤러는 다른 컨트롤러의 컨텐츠를 관리할 수 있음

 

Data Marshaling

뷰 컨트롤러는 뷰와 데이터간의 중재자 역할을 하고 있고

UIViewController를 상속하고 데이터를 관리하는 변수를 설정하는 것으로 데이터를 관리합니다

 

 

 

뷰 컨트롤러와 데이터 객체 내에서는 항상 명확하게 분리하여 사용해야합니다

UIDocument는 뷰 컨트롤러와 별도로 데이터를 관리하는 방법이 있습니다

 

문서 객체는 데이터를 읽고 쓰는 방법을 아는 컨트롤러 객체입니다

 

UIDocument

앱의 데이터를 관리한느 추상 클래스로 Document를 사용해서 얻을 수 있는 이점이 있습니다

 

백그라운드 큐에서 비동기적으로 데이터를 읽/쓰기 가능

Document 파일의 읽/쓰기가 클라우드 서비스에 자동으로 결합

다른 버전의 Document 충돌 감지 지원

임시 파일에 먼저 저장하고 이후 실제 파일을 대체함으로 안전한 저장 가능

자동 저장 가능

 

 

 

UIViewController | Apple Developer Documentation

An object that manages a view hierarchy for your UIKit app.

developer.apple.com

 

 

Managing your app’s life cycle | Apple Developer Documentation

Respond to system notifications when your app is in the foreground or background, and handle other significant system-related events.

developer.apple.com

 

 

View Controller Programming Guide for iOS: The Role of View Controllers

View Controller Programming Guide for iOS

developer.apple.com

 

 

 

반응형