생명 주기란?
무엇을 기준으로 태어난 것과 죽었다는 것을 결정하나?
우리 눈에서 사라진다고 메모리에서도 사라질까?
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에서 어떻게 비교해야 할지 고민을 오래 해 봤지만...아직까지는 답을 찾지 못하였다. 잘하면 코드를 다시 뜯어 고칠 수도...