아웃렛(Outlets)과 Lifecycle에 대하여

sonny·2024년 9월 1일
0

iOS 파헤치기

목록 보기
2/12
post-thumbnail

간단한 심볼롤러 제작하며 코드를 공부하며 궁금한 부분을 정리했다

    @IBOutlet weak var ImageView: UIImageView!
    @IBOutlet weak var Label: UILabel!
    @IBOutlet weak var Button: UIButton!

이 줄들은 ImageView, Label, Button이라는 세 가지 프로퍼티를 선언한다.

이 프로퍼티들은 스토리보드의 UI 구성 요소에 연결되고

@IBOutlet 키워드는 이러한 프로퍼티들이 스토리보드의 UI 요소들과 연결될 수 있게 해준다.

weak 키워드는 뷰 컨트롤러가 이러한 객체들을 소유하지 않음을 나타내고 참조 사이클과 메모리 누수를 방지하는 데 도움을 줄 수 있다.

각 프로퍼티는 특정 UIKit 클래스 타입이다.

viewDidLoad의 의미와 역할

viewDidLoad 는 뷰 컨트롤러의 뷰가 메모리에 로드된 후 에 호출되는 메서드이다.

이 메서드는 뷰가 사용자에게 보이기 전에 한 번만 호출이 되며 즉, 뷰 컨트롤러가 처음으로 생성되고 나서 뷰가 준비 될 때 호출이 된다.

override func viewDidLoad() {
    super.viewDidLoad()
    //일반적인 사용의 예시다
    setupUI()
    fetchData()

super.viewDidLoad() 를 호출하여 상위 클래스의 기본 동작을 수행한다. 이건 필수적인 호출이고 이를 통해 뷰 컨트롤러의 Lifecycle 관리가 올바르게 이루어진다고 보면 된다.

결론을 내리자면 viewDidLoad는 뷰가 준비될 때 한 번 호출되어 초기 설정을 수행하고 뷰 컨트롤러가 제대로 동작할 수 있도록 준비를 하는 역할이다.

> Lifecycle 관리

라이프사이클 관리란 iOS 애플리케이션에서 뷰 컨트롤러가 생성되고 표시되고 사라지는 전 과정을 체계적으로 관리하는 것을 의미한다.

init 또는 initWithCoder:

  • 뷰 컨트롤러가 메모리에 로드될 때 호출된다. 뷰 컨트롤러의 인스턴스가 생성되는 시점이다.

viewDidLoad:

뷰 컨트롤러의 뷰가 메모리에 로드된 후에 호출된다. 이 시점에서 뷰는 아직 화면에 표시되지 않았지만, 뷰의 기본적인 설정을 하기에 적합하다 예를 들어, 초기 데이터를 로드하거나, UI 구성 요소를 설정할 수 있다.

viewWillAppear(_:):

뷰가 화면에 나타나기 직전에 호출된다. 뷰가 화면에 보이기 직전에 수행해야 할 작업이 있을 때 사용하면 된다. 예를 들어, 뷰가 다시 나타날 때 데이터를 갱신하거나 애니메이션을 준비할 수가 있을 것이다.

viewDidAppear(_:):

뷰가 화면에 완전히 나타난 후에 호출된다. 뷰가 화면에 보인 후에 시작해야 하는 작업 (예: 애니메이션 시작, 데이터 로드 완료 표시 등)을 처리할 수 있다.

viewWillDisappear(_:):

뷰가 화면에서 사라지기 직전에 호출된다. 뷰가 사라지기 전에 해야 할 작업(예: 입력 중인 데이터를 저장하거나, 애니메이션을 중지 등)을 처리할 수 있다.

viewDidDisappear(_:):

뷰가 화면에서 완전히 사라진 후에 호출된다. 뷰가 화면에서 사라진 이후에 처리해야 할 작업을 수행할 수 있다.

deinit:

뷰 컨트롤러가 메모리에서 해제될 때 호출된다. 뷰 컨트롤러가 더 이상 필요하지 않을 때 호출되며, 메모리 누수를 방지하기 위해 사용하던 리소스를 해제하는 데 사용한다.

라이프 사이클 관리의 중요성

라이프 사이클을 적절하게 관리함으로써 메모리 누수를 방지할 수 있고 불필요한 메모리 사용을 줄일 수 있다.

예를 들어 화면에서 사라지는 뷰에 대한 데이터 로딩을 중지하거나, 타이머를 해제할 수 있을 것이다.

라이프사이클 메서드를 활용하여 적절한 시점에 데이터를 로드하고 UI를 업데이트 함으로써 일관된 사용자 경험을 제공할 수 있다.

예를 들어 뷰가 다시 나타날 때마다 데이터를 갱신하여 최신 상태를 유지할 수 있는 것이라고 할까

그리고 필요하지 않은 시점에 불필요한 작업을 하지 않도록 성능을 최적화 할 수 있다.

예를 들어 뷰가 보이지 않을 때 애니메이션을 중지하거나 네트워크 요청을 일시적으로 중단할 수 있을 것이다.

profile
iOS 좋아. swift 좋아.

0개의 댓글