Mar 18, 2021, TIL (Today I Learned) - iOS View LifeCycle

Inwoo Hwang·2021년 8월 26일
0
post-thumbnail

수업 내용

iOS View LifeCycle

생명 주기란?

  • 화면이 태어나고 죽기까지의 과정 또는 cycle이라고 볼 수 있다.

무엇을 기준으로 태어난 것과 죽었다는 것을 결정하나?

  • 객체지향 프로그램에서는 객체가 클래스의 인스턴스이다.
    • 메모리에 올라왔다 == instance의 태어남. 즉 해당 데이터가 활동할 준비가 되어있다를 뜻한다.
    • 그리고 메모리에서 사라졌다 == instance의 죽음을 뜻한다.

우리 눈에서 사라진다고 메모리에서도 사라질까?

  • 그렇지 않다. deinit되기 전까지 메모리에서 사라졌는지 알수 없다.

View의 lifecycle은 누가 결정하나?

  • view를 관리 해 주는 View Controller가 View의 생명주기를 파악할 수 있다.

    View Controller: View contents를 갱신 해 주고 유저의 입력에 반응한다.

하나의 view를 그리기 위해서 최소 하나의 view instance가 존재 해야 하고

View Controller가 View를 갖게 되는 순간은 loadView( ) 메서드를 사용하는 순간.

loadView()메서드를 사용하는 순간 View는 태어난다.

ViewWillAppear(), viewDidAppear(), viewIllDisappear(), viewDidDisappear() 해당 메서드를 사용하는 이유는?

  • 앱은 이벤트에 반응하도록 설계되어있다. 화면이 보여지거나 사라지는 것 또한 하나의 중요한 이벤트이고 이런 변화에 반응하는 것이 이벤트에 반응하도록 설계되었다.
import UIKit

class ViewController: UIViewController {
  
  override func loadView() {
    super.loadView()
    print("load view")
  }
  
  override func viewDidLoad() {
    super.viewDidLoad()
    print("view did load")
  }
  
  override func viewWillApear (_ animated: Bool) {
    super.viewWillAppear(animated)
    print("view will appear")
    // 새로운 데이터를 뷰에 업데이트
  }
  
  override func viewDidAppear(_ animated: Bool) {
     super.viewDidAppear(animated)
     print("view did appear")          
   }
  
  override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    print("view will disappear")
  }
  
  override func viewDidDisappear(_ animated: Bool) {
    super.viewDidDisappear(animated)
    print("view did disappear")
  }
  
  deinit {
    print("deinit")
  }

}

메모리에서 사라질 것이다를 우리는 deinit을 통해서 알게 된다.

View가 disappear되는 순간 해당 view는 기본적으로 메모리에서 해제(deinit) 되도록 설정되어있다.

문제점 / 고민한 점

@IBAction func touchUpMakeStrawberryJuiceButton(_ sender: UIButton) {
        juiceMaker.makeJuice(order: Juice.strawberryJuice)
        guard let stockOfStrawberry =FruitStorage.shared.refrigerator[.strawberry] else {
            return
        }
        strawberryStockLable.text = String(stockOfStrawberry)
    }

딸기쥬스재조 버튼을 누르면 딸기 재고가 감소하는 것 까지는 구현 하였는데....에러처리한 부분을 어떻게 alert로 구현해야 할지 고민이다. 남아있는 딸기 재고와 레시피에서 요구하는 딸기 갯수를 view controller에서 어떻게 비교해야 할지 고민을 오래 해 봤지만...아직까지는 답을 찾지 못하였다. 잘하면 코드를 다시 뜯어 고칠 수도...

profile
james, the enthusiastic developer

0개의 댓글