[iOS] awakeFromNib()

유인호·2024년 1월 8일
0

iOS

목록 보기
12/64

awakeFromNib의 호출 시점

Interface Builder의 아카이브 및 nib파일이 로드 된 후 호출되는 메서드, IB가 전부 아카이브 되어있기에 outlet과 action의 연결을 보장함.

awakeFromNib은 init과 loadView사이에 실행되게됨.


궁금점

1. UITableViewCell을 만들면 기본 메서드로 있는데, 삭제해도 별반 차이 없어보임. 대체 무슨일을 함?

G선생님에 의하면..

  • UITableViewCell과 같은 경우에는 awakeFromNib이 더 적절한 시점일 수 있습니다. UITableViewCell은 UITableView에서 재사용되기 때문에 viewDidLoad은 한 번만 호출되는 반면, awakeFromNib은 셀이 Nib 파일에서 로드될 때마다 호출될 수 있습니다.
  • 그러나 일반적으로 UITableViewCell에서 초기화 작업을 수행하는 경우에는 awakeFromNib보다는 cellForRowAt 메서드에서 직접 처리하는 것이 권장됩니다. 셀이 테이블 뷰에 표시될 때마다 호출되는 cellForRowAt에서 초기화를 수행하면 더 효과적으로 관리할 수 있습니다. 이렇게 하면 재사용 문제에 대응할 수 있고, 더 나은 성능을 얻을 수 있습니다.일에서 로드될 때마다 호출될 수 있습니다.

G선생님의 설명만 보았을땐, ViewDidLoad랑 그렇게 차이가 없어보임.

이럴땐 구글링, [iOS] awakeFromNib()이 글에서 이런 문구가 있었음.

  • 일반적으로 디자인 타임에 수행 할 수없는 추가 설정이 필요한 객체에 대해 awakeFromNib를 구현합니다. 예를 들어 이 방법을 사용 하여 사용자 기본 설정이나 다른 컨트롤의 값과 일치하도록 컨트롤의 기본 구성을 사용자 지정할 수 있습니다. 또한 개별 컨트롤을 응용 프로그램의 이전 상태로 복원하는 데 사용할 수도 있습니다

요약하면, awakeFromNib은 주로 아카이브에서 객체를 인스턴스화하고 초기화할 때 필요한 작업을 수행하기 위해 사용되며, 다른 객체로의 메시지를 안전하게 보낼 수 있는 시점이라는 특징이 있음.

cellForRowAt는 반복되어서, 만약 디자인이 고정적이라면 awakeFromNib()에 디자인을 넣는것이 더 효율적일것

?? 메시지가 뭐임?

objc의 작동 방식으로, 객체간의 상호작용을 하는 방법 중 하나임.
메시지를 안전하게 보낸다라는 의미는 두가지의 의미가 있음.
1. 메시지를 수신하는 메서드가 이미 정의되어 있다.
2. 메시지를 수신하는 메서드가 없어도 예외가 발생하지 않는다. (예외 처리를 해두었다)

2. nib가 뭐길래 Interface Builder의 아카이브와 같이 이루어지는가

nib는 NeXTSTEP의 인터페이스 빌더(Interface Builder)임. (NeXT는 스티브 잡스가 설립한 회사)
쉽게 말해서, Interface Builder의 구닥다리 버전.
NIB -> XIB로 넘어옴.

XIB는 XML기반의 인터페이스 빌더 파일이고, NIB도 XML기반의 인터페이스 빌더 파일임.

NIB와 XIB전부 인터페이스의 객체 및 레이아웃 속성을 저장함.

3. Interface Builder 너 궁금함.

Interface Builder가 정확하게 무슨일을 하는지 궁금해짐.

Interface Builder의 실행을 3가지로 쪼갠다면

  • Design Time
    - StoryBoard를 꾸미는 단계 (스토리보드를 XML파일로 켤 수 있음. XML파일을 시각화 해놓은게 스토리보드)
  • Compile Time
    - 컴파일, XML파일을 NIB파일로 변환함.
  • Run Time
    - 필요할때 NIB파일을 로드해서 사용.

레퍼런스

awakeFromNib() | Apple Developer Documentation
[iOS] awakeFromNib()
[TIL] Swift. awakeFromNib
[iOS] UINib 그리고 awakeFromNib에 대하여
A Bit About Interface Builder

profile
🍎Apple Developer Academy @ POSTECH 2nd, 🌱SeSAC iOS 4th

0개의 댓글