Xib Nib

이건준·2022년 3월 5일

문제제기

사실 평소에 nib, xib많이 보았다, 심지어 awakeFromNib였나 이것도 보고 CustomViewController를 위한 init메소드안에서도 보았다, 하지만 평소에 나는 절대 스토리보드로 UI를 구성할 일이 없고 항상 코드로만 작성할꺼니까 굳이 알 필요없을꺼야하면서 넘겼던적이 많다, 하지만 이번에 required init(coder:)에 관해 공부해보면서 이렇게된거 한번 정리해서 공부해보자라는 생각이 들어 이렇게 글을 쓴다

문제해결(이에 대한 정보들)

-> Xcode 에서 인터페이스 빌더로 만드는 모든 UI 구성요소는 XIB 파일 형태로 만들어진다

그리고 앱을 실행시키면 NIB 파일이 로드되고 내부의 객체들이 인스턴스화 되면서 NIB 파일 내부의 각 객체들은 initWithcoder: 메시지를 받게 된다. 그래서 인터페이스 빌더에서 사용하게 되는 모든 UIView 상속 클래스는 init(coder:) 가 호출되는 것이다. 이후 모든 객체들의 초기화가 끝나고 outlet, action 과의 connection 까지 끝나면 각 객체의 awakefromnib 메시지를 보내어 오버라이드한 awakefromnib가 호출된다.

-> 기본적으로 Xib파일은 xml기반, Nib는 바이너리기반파일이고 Xib파일이 빌드되면은 컴파일에 의해 Nib파일로 변경되며 Xib파일로 있다가 빌드될때 변경되는 이유는 Xib형태가 소스컨트롤에 유리하기때문이다

xib가 "플랫 파일"에 저장된다는 점을 제외하고는 nib과 기능적으로 동일
(flat file : 플랫파일(flat file)은 아무런 구조적 상호관계가 없는 레코드들이 들어 있는 파일)
xib는 Bundle이 아닌 플랫 파일이기 때문에, SCM(source control management : 소스 제어 관리)시스템을 보다 쉽게 처리할 수 있다고 해요.(=xib가 소스컨트롤에 친숙함)
그리고, 빌드를 하면, xib가 앱에 포함될 nib파일로 컴파일이 된다고 합니다.

출처: https://zeddios.tistory.com/298 [ZeddiOS]

뷰 정보를 담고 있는 XIB파일을 빌드하게 되면, 접근하기 쉬운 바이너리 NIB파일로 컴파일 되고, 앱의 번들(앱 실행에 사용되는 파일이 저장된 폴더)로 복사된 후 실행파일에서 사용됩니다

문제해결(스스로 깨달은것들)

-> 생각해보니까 내가 여태 코드로 tableView나 collectionView에 register메소드를 이용해서 CustomCell을 등록하고자할때 항상 nib혹은 AnyClass를 첫번째 인자로 받고있었는데 나는 항상 CustomCell.self이라고 사용한것으로 보아서 AnyClass에 대한 인자로 넣었던것이였고 따로 CustomCell.xib파일을 생성할 수 있으니까 이를 생성하고 UINib를 통해서 만들어준 nib파일또한 register메소드의 첫번째 인자로 넣을수있겠구나 ㅇㅇ

0개의 댓글