react를 하면 컴포넌트의 생명주기는 기본이자 상식이다
스위프트에서 뷰의 생성에서 구성, 화면 표시, 소멸의 흐름을 관리하는 생명주기를 공부해본다
override init(frame: CGRect) {
super.init(frame: frame)
settingView()
// ui구성 및 설정을 정의하는 함수
}
뷰가 초기화 할때 쓰는 코드
초기화할 레이아웃 설정과 기본 속성을 정의한다
required init?(coder: NSCoder) {
super.init(coder: coder)
settingView()
}
인터페이스 빌더에서 뷰를 생성할 때 사용한다
override func awakeFromNib() {
super.awakeFromNib()
settingView()
}
인터페이스 빌더에서 뷰를 불러온다음 호출 한다
override func sizeThatFits(_ size: CGSize) -> CGSize {
return CGSize(width: 50, height: 50)
}
뷰의 크기 계산
override var intrinsicContentSize: CGSize {
return CGSize(width: 200, height: 100)
}
override func layoutSubviews() {
super.layoutSubviews()
myCustomLayout()
}
뷰의 크기와 위치가 변경 시
뷰의 서브 뷰가 추가혹은 제거 시
오토레이아웃의 제약 조건이 변경 시
setNeedsLayout() 또는 layoutIfNeeded()가 호출되었을 때
프레임이나 오토레이아웃을 동적으로 설정할떄 사용된다
복잡하지않고 가벼온 코드를 작성해야한다
layoutSubviews 내부에서 setNeedsLayout()를 호출하면 루프지옥 발생
override func draw(_ rect: CGRect) {
guard let context = UIGraphicsGetCurrentContext() else { return }
context.setFillColor(UIColor.red.cgColor)
context.fill(rect)
}
그리기작업을 커스터마이징한다
Core Animation이나 Core Graphics을 사용해서 구현할떄 사용한다
deinit {
print("뷰가 없어집니다")
}
뷰가 메모리에서 해제될떄 호출된다
즉 UIView의 생명주기는 init으로 뷰를 설정하는 초기화 단계,
layoutSubviews()와 updateConstraints()로 서브뷰의 크기나 위치를 동적으로 설정하는 레이아웃 설정단계
removeFromSuperview()로 뷰를 제거하거나 deinit으로 메모리를 정리하는 종료의 3단계로 나뉜다
코드베이스 개발 시 생성 할떄 호출
뷰컨트롤러의 초기 설정
인터페이스 빌더에서 로드될떄 호출
override func loadView() {
view = myCustomView()
}
뷰 컨트롤러가 관리할 뷰를 생성
override func viewDidLoad() {
super.viewDidLoad()
setUI()
}
뷰가 로드된 직후 호출하여 초기 설정과 데이터 바인딩을 한다
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
addSetUI()
}
뷰가 화면에 나타나기 직전에 호출
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
startAnimation()
}
뷰가 화면에 나타난 직후에 호출된다
viewWillAppear 에서 셋팅한 애니메이션같은 것들이 시작된다
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
removeAnimation()
}
뷰가 화면에서 사라지기 직전에 호출한다
애니메이션 정지 및 데이터를 저장한다
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
cleanUI()
}
뷰가 화면에서 사라진 뒤에 호출한다
리소스를 정리하고 현재 상태를 를 저장한다
메모리 부족할 경우 호출하며 불필요한 리소스를 해제한다
타이머와 NotificationCenter 옵저버, 뷰컨트롤러가 해제하거나 네트워크 요청 취소해야할 시 호출