본문 바로가기
🍎 Swift/iOS 학습 노트

[Swift 🍎] ViewController 메서드

by 솔비님 2024. 7. 10.

 

1. loadView()

  • 이 메서드는 뷰를 직접 프로그래밍 방식으로 설정할 때 사용된다(코드베이스)
  • 스토리보드나 XIB 파일을 사용하는 경우 직접 구현할 필요는 없다
  • 사용하지 않아도 상관 없지만 오류 발생 확률이 있다
    override func loadView() {
         // UIView를 직접 생성하여 뷰로 설정합니다.
        let view = UIView()
        view.backgroundColor = .white
        
        // UIButton을 추가합니다.
        let button = UIButton(type: .system)
        button.setTitle("Press Me", for: .normal)
        button.frame = CGRect(x: 100, y: 100, width: 100, height: 50)
        view.addSubview(button)
        
        // 생성한 UIView를 뷰 컨트롤러의 뷰로 설정합니다.
        self.view = view
        
        print("loadView - 코드로 뷰를 직접 설정합니다.")
    }

 

 

2. viewDidLoad()

  • 뷰가 메모리에 로드된 후 호출된다
  • 뷰의 초기 설정, 데이터 로드, UI 초기화 작업을 수행한다
  • loadView 미사용 시 문제가 없을 경우에는 해당 메서드에 때려 박아도 된다
    override func viewDidLoad() {
        super.viewDidLoad()
        print("viewDidLoad - 뷰가 메모리에 로드된 후 호출됩니다.")
        // 초기 설정 작업을 여기서 수행합니다.
    }

 

 

3. viewWillAppear(_ animated: Bool)

  • 뷰가 뷰 계층에 추가되기 직전에 호출된다
  • 뷰가 나타나기 직전에 필요한 작업을 수행한다
  • view의 UI가 만들어진 후 데이터가 호출되면 리로드 작업이 다시 필요할 수 있으므로 추가 수정을 방지하기 위해 사용하면 좋을 것 같다
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        print("viewWillAppear - 뷰가 뷰 계층에 추가되기 직전에 호출됩니다.")
        // 뷰가 나타나기 직전에 필요한 작업을 여기서 수행합니다.
    }

 

 

4. viewDidAppear(_ animated: Bool)

  • 뷰가 뷰 계층에 추가된 후 호출된다
  • 뷰가 화면에 완전히 나타난 후 필요한 작업을 수행한다
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        print("viewDidAppear - 뷰가 뷰 계층에 추가된 후 호출됩니다.")
        // 뷰가 완전히 나타난 후 필요한 작업을 여기서 수행합니다.
    }

 

 

5. viewWillDisappear(_ animated: Bool)

  • 뷰가 뷰 계층에서 제거되기 직전에 호출된다
  • 뷰가 사라지기 직전에 필요한 작업을 수행한다
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        print("viewWillDisappear - 뷰가 뷰 계층에서 제거되기 직전에 호출됩니다.")
        // 뷰가 사라지기 직전에 필요한 작업을 여기서 수행합니다.
    }

 

 

6. viewDidDisappear(_ animated: Bool)

  • 뷰가 뷰 계층에서 제거된 후 호출된다
  • 뷰가 화면에서 완전히 사라진 후 필요한 작업을 수행한다
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        print("viewDidDisappear - 뷰가 뷰 계층에서 제거된 후 호출됩니다.")
        // 뷰가 완전히 사라진 후 필요한 작업을 여기서 수행합니다.
    }

 

 

7. viewWillLayoutSubviews()

  • 뷰의 서브뷰가 레이아웃되기 직전에 호출된다
  • 뷰의 레이아웃을 업데이트하기 전에 필요한 작업을 수행한다
  • view 내부에 포함되는 lable, button 등을 통틀어서 subview 라고 함
    override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()
        print("viewWillLayoutSubviews - 뷰의 서브뷰가 레이아웃되기 직전에 호출됩니다.")
        // 뷰의 레이아웃을 업데이트하기 전에 필요한 작업을 여기서 수행합니다.
    }

 

 

8. viewDidLayoutSubviews()

  • 뷰의 서브뷰가 레이아웃된 후에 호출된다
  • 뷰의 레이아웃이 업데이트된 후 추가적인 레이아웃 작업을 수행한다
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        print("viewDidLayoutSubviews - 뷰의 서브뷰가 레이아웃된 후에 호출됩니다.")
        // 뷰의 레이아웃이 업데이트된 후 추가적인 레이아웃 작업을 여기서 수행합니다.
    }

 

 

9. deinit

  • 뷰 컨트롤러가 메모리에서 해제될 때 호출된다
  • 메모리 해제 전 필요한 정리 작업을 수행한다
    deinit {
        print("deinit - 뷰 컨트롤러가 메모리에서 해제될 때 호출됩니다.")
        // 메모리 해제 전 필요한 정리 작업을 여기서 수행합니다.
    }