UIViewController & viewWillappear & awakeFromNib

YongJunCha·2021년 4월 21일
0

swift

목록 보기
2/18
post-thumbnail

ViewController Life Cycle

위의 그림은 UIViewContoroller의 생명주기를 나타낸 그림이다.
항상 느끼지만 작명은 매우 중요한 것 같다.
글만 읽어도 뷰컨트롤러의 생명 주기는 화면이 생겼다 없어지는 것이다.

awakeFromNib

Nib/ Xib는 미니 스토리보드의 역할은 한다. 이 미니스토리보드에서 객체가 생성될 때 호출되는 메서드다. 세그웨이 준비나 IBOutlet이 설정되기 이전이기 때문에 작업이 필요할 경우 여기보다는 viewDidLoad() 메서드에서 수행하는 것이 낫다.
그렇지만 UIView와 같은 View아이템의 경우 UIViewController가 아니기 때문에 viewDidLoad() 메서드가 없다. MVC 구조에서 View 역할을 하기 위한 코드는 awakeFromNib()에서 작업할 수 있다.

viewDidLoad

  • 애플 공식 문서
    "Called after the controller's view is loaded into memory"
    뷰의 컨트롤러가 메모리에 로드되고 난 후에 호출 됨

이제는 몸이 기억하는 뷰디드로드슈퍼뷰디드로드
viewDidLoad 메소드는 뷰의 로딩이 끝났을 때 자동적으로 호출된다.
그래서 대부분 초기 화면 설정과 구성하는 용도로 많이 쓰인다.
화면이 처음 만들어질 때 한 번만 실행되므로, 처음 한 번만 실행해야 하는 코드가 있을 때는 viewDidLoad에 작성해주면 된다.

  • ex)Firebase 로그인 유저
  • ex)자잘한 cornerradious, background, isEnabled 등

화면이 처음 만들어질 때 한 번만 실행되므로,
처음 한 번만 실행해야 하는 초기화 코드가 있을 경우
이 메소드 내부에 작성하면 됩니다.

viewWillAppear


viewWillAppear는 컨트롤러에게 뷰가 나타날 것이라고 알리는 역할을 한다.
왜쓰는지 이해가 안 될 수 있지만, 예를 들면 달라질 것이다.
내가 만들고 있는 프로젝트를 예시로 들어보겠다.

New Chat으로 이동하면 사용하고있는 유저들이 표시된다. 여기서 대화할 상대를 선택하고 대화 시작을 누른 후 다시 채팅리스트가 있는 곳으로 이동할 때는 새롭게 추가된 상대까지 포함된 List가 실행되야 하므로, viewDidLoad에서는 실행해 줄 수 없다. 이런 경우에는 viewWillAppear에서 실행해주는 것이 옳다.


viewDidAppear

view가 나타났다는 것을 컨트롤러에게 알려준다.
화면에 그려질 애니메이션도 실행해준다.
viewDidAppear는 뷰가 화면에 나타난 직후에 실행됩니다.
이 것을 제외하고 viewDidAppear와 viewWillAppear는 거의 같다.



viewWillDisappear

viewWillDisAppear는 뷰가 사라지기 직전에 호출되는 함수다.
뷰가 삭제 되려고하고있는 것을 뷰 콘트롤러에 통지합니다.



viewDidDisappear

viewDidDisAppear가 호출되면뷰 컨트롤러가 뷰가 제거되었음을 알려준다.



review

생명주기마다, 적절하게 코드를 작성해주면 매끄러운 코딩을 할 수 있을 것 같다.

0개의 댓글