생명주기 (3) [ View 생명주기 ]

2024. 9. 1. 14:49·iOS/UIKit
반응형

 

오늘은 iOS 생명주기의 마지막 단계인 View의 생명주기에 대해 알아보자.

 

전체적인 생명주기는 다음 그림과 같다. 


init

1) init((coder:))


스토리보드나 xib파일은 활용하여 화면을 만들 때 컴파일러가 인식할 수 있게 코드로 변환해주는 과정에서 사용한다.

코드 base로 작성했을 때는 required init 형태로 선언만 해줘야한다. 어차피 호출되지 않는다.

 

2) awakeFromNib()

인터페이스 빌더 또는 nib 파일에서 로드된 후 생성되는 메소드이다.

Nib/Xib 파일이 언아카이브되고 나서 init(coder: NSCoder)로 모든 객체가 초기화가 완료되었을 때 호출된다.

마찬가지로 코드 base로 작성되었을 때는 호출되지 않는다.

 

 3) init((frame: ))

View의 인스턴스를 만들기 위해 지정된 이니셜라이저이다.

스토리보드나 xib 파일을 사용하지 않고 코드로 만들었을 때 사용해야하는 이니셜라이저이다.

 


Subview

1) didAddSubview()

view에게 subview가 추가됨을 알린다.

addSubview를 사용할 때 마다 호출된다.

 

2) willRemoveSubview()

view에게 subview가 제거된다고 알린다.

removeFromSuperview를 사용할 때 마다 호출된다.

 

3) willMove( (toSuperView: ) )

슈퍼뷰가 변경될 것이라고 알려주는 메소드이다.

이 메소드는 기본적으로 기능을 구현하지 않는다. 슈퍼뷰가 변경될 때마다 추가 작업을 수행하도록 재정의할 수 있다.

 

4) didMoveToSuperview( )

슈퍼뷰가 변경되었다는 것을 알려주는 메소드이다.


Window

1) willMove( (toWindow: ) )

window가 변경될 것이라고 알려주는 메소드이다.

이 메소드는 기본적으로 기능을 구현하지 않는다. 윈도우가 변경될 때마다 추가 작업을 수행하도록 재정의할 수 있다.

 

2) didMoveToWindow( )

window가 변경되었다는 것을 알려주는 메소드이다.

 


update Cycle

1) updateConstraints()

뷰의 제약조건을 업데이트하는 메소드이다.

제약조건을 제자리에서 변경하는 것이 너무 느리거나 뷰가 많은 중복 변경을 하는 경우에 사용한다.

 

버튼 이벤트로 제약조건을 변경하는 경우에는 버튼 이벤트 메서드에서 직접 변경하는 것이 좋다.

 

2) layoutSubviews()

하위 뷰를 배치하는 메소드이다.

해당 메소드는 직접 호출하면 안된다.

 

모든 하위 뷰의 메소드도 호출이 되기 때문에 뷰가 쌓였을 때 호출하면 큰 부하가 생긴다.
레아이웃의 제약조건이 완료가 되었을 때 ViewController의 viewDidLayoutSubviews 에 호출한다.


레이아웃을 강제로 업데이트하려면 setNeedsLayout() 을 사용하고 [다음 사이클에 적용]
즉시 업데이트하려면 layoutIfNeeded() 를 사용해야 한다.

 

위 내용은 다음 포스팅에서 다루겠다.

 

3) draw( )

전달된 CGRect rect 사각형으로 뷰를 그리는 메소드이다.

뷰가 처음 표시되거나 뷰의 보이는 부부을 무효화하는 이벤트가 발생할 때 호출된다.

 

해당 메소드는 직접 호출하면 안된다.

뷰의 일부를 무효화하여 해당 부분을 다시 그리게 하려면
setNeedsDisplay() 또는 setNeedsDisplay(_ :)를 사용해야 한다.

 

 

결과

 

 

 

 

 

반응형

'iOS > UIKit' 카테고리의 다른 글

frame vs bounds (1) [ CGPoint, CGSize, CGRect ]  (0) 2024.09.02
생명주기 (4) [ 업데이트 Cycle ]  (2) 2024.09.01
UIKit 코드 베이스 셋팅  (0) 2024.09.01
생명주기 (2) [ ViewController 생명주기 ]  (1) 2024.08.31
생명주기 (1) [ iOS 앱 생명주기, Scene 생명주기 ]  (3) 2024.08.31
'iOS/UIKit' 카테고리의 다른 글
  • frame vs bounds (1) [ CGPoint, CGSize, CGRect ]
  • 생명주기 (4) [ 업데이트 Cycle ]
  • UIKit 코드 베이스 셋팅
  • 생명주기 (2) [ ViewController 생명주기 ]
Hamp
Hamp
남들에게 보여주기 부끄러운 잡다한 글을 적어 나가는 자칭 기술 블로그입니다.
  • Hamp
    Hamp의 분리수거함
    Hamp
  • 전체
    오늘
    어제
    • 분류 전체보기 (304) N
      • CS (30)
        • 객체지향 (2)
        • Network (7)
        • OS (6)
        • 자료구조 (1)
        • LiveStreaming (3)
        • 이미지 (1)
        • 잡다한 질문 정리 (0)
        • Hardware (2)
        • 이론 (6)
        • 컴퓨터 그래픽스 (0)
      • Firebase (3)
      • Programing Langauge (37)
        • swift (32)
        • python (4)
        • Kotlin (1)
      • iOS (132)
        • UIKit (37)
        • Combine (1)
        • SwiftUI (32)
        • Framework (7)
        • Swift Concurrency (22)
        • Tuist (6)
        • Setting (11)
        • Modularization (1)
        • Instruments (6)
      • PS (59)
        • 프로그래머스 (24)
        • 백준 (13)
        • LeetCode (19)
        • 알고리즘 (3)
      • Git (18)
        • 명령어 (4)
        • 이론 (2)
        • hooks (1)
        • config (2)
        • action (7)
      • Shell Script (2)
      • Linux (6)
        • 명령어 (5)
      • Spring (13) N
        • 어노테이션 (1)
        • 튜토리얼 (11) N
      • CI-CD (4)
      • Android (0)
        • Jetpack Compose (0)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    property
    concurrency
    Tuist
    dfs
    프로그래머스
    GIT
    백준
    dp
    protocol
    Swift
    Spring
    투포인터
    boostcamp
    CS
    dispatch
    IOS
    SwiftUI
    lifecycle
    UIKit
    AVFoundation
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.0
Hamp
생명주기 (3) [ View 생명주기 ]
상단으로

티스토리툴바