기타 2008.09.01 13:21
1. nib 파일이란?
Nib는 코코아 어플리케이션에서 사용하는 파일로 인터페이스빌더에서 생성한 윈도우, 메뉴, 컨트롤과 사용자가 만든 오브젝트들의 레이아웃과 속성등의 정보와 오브젝트간의 연결과 바인딩등의 정보를 포함하고 있는 파일입니다.

윈도우즈의 rc 파일과 개념이 비슷하지만 소스코드에서 처리하던 메시지 처리함수 연결과 바인딩등의 더 포괄적인 정보를 가지고 있습니다.

Xcode 3.1에서는 개발과정에선 nib 대신 xib란 XML 포멧의 파일을 사용합니다. (개발이 완료되고 릴리즈된 후에 nib의 역활은 이전과 동일합니다.) 3.1 이전의 자료에서는 Xcode에서 nib를 더블클릭하여 관련된 nib를 인터페이스 빌더로 실행하는 것으로 나와 있지만, 현 3.1 버젼에서는 xib를 더블클릭하여 실행합니다.


2. MainMenu.nib
사용자 삽입 이미지
MainMenu.nib는 어플리케이션에서 사용하는 메뉴, 메인윈도우, Application등 기본적인 오브젝트를 포함하고 있습니다. MainMenu.nib의 File's Owner는 NSApplication이며 또는 사용자가 생성한 NSApplication의 서브클래스를 지정할 수 있습니다. 그렇기 때문에 MainMenu.nib는 NSApplication에 의해 실행 초기(이벤트 루프에 들어 가기 전)에 자동으로 로딩됩니다.

그러므로 가능하면 다른 오브젝트나 컨트롤, 윈도우등은 모듈별로 각각의 nib를 만들어 작게 유지하며, 해당 모듈의 실행 시에만 메모리에 올라 오도록 하는 것이 좋습니다. MainMenu.nib가 많은 오브젝트나 리소를 가지고 있으면, 초기 런칭 속도가 느려지며 처음부터 많은 메모리를 사용하게 됩니다. 

MainMenu 외에 사용자가 직접 nib를 로딩해야 할 경우에는 NSBundle을 사용하여 아래와 같이 호출합니다.

[NSBundle loadNibNamed:@"[nib file name]" owner:self];


3. nib 파일 로딩
nib 파일은 로딩 시에 아래와 같은 순서로 처리됩니다.

1) 메모리 로딩
해당 Nib에 등록된 오브젝트, 관련된 리소스(이미지, 사운드 파일등)를 메모리 또는 캐쉬로 불러 옵니다.

2) 오브젝트 Unarchive
nib에 냉동포장 되어있던 오브젝트들을 해동합니다. 인터페이스 빌더의 오브젝트들에게는 initWithCoder 메시지를 발송하며, NSView의 서브클래스들에게는 initWithFrame, 그외 오브젝트들에게는 init 메시지를 발송합니다. 그리고 인터페이스 빌더에서 설정한 정보에 따라 오브젝트들간의 연결(actions, outlet)과 바인딩을 설정합니다.

3) awakeFromNib
nib내의 모든 오브젝트들에게 awakeFromNib 메시지를 발송하여, 오브젝트가 생성이 완료되었음을 알립니다. nib내의 오브젝트들은 이 메시지를 이용하여 초기화와 관련된 처리를 할 수 있습니다.

사용자 삽입 이미지
그리고 nib내의 윈도우중에 인터페이스 빌더의 Window/Behavior내의 'Visible at Launch' 속성이 체크되어 있는 윈도우를 오픈합니다.



4. 로컬라이징
nib 파일의 로컬라이징은 매우 쉽습니다. Xcode 내에서 해당 xib를 마우스 우클릭하여 나온 메뉴중에 'Get Info'를 클릭하여 정보창을 오픈합니다.
사용자 삽입 이미지
하단의 Add Localization 버튼을 클릭하여 해당언어를 추가합니다.

사용자 삽입 이미지
XCode에서 좌측과 같이 Korean이 추가되어 있는 것을 확인할 수 있습니다. 프로젝트 디렉토리내에는 Korean.lproj 디렉토리가 추가되고 그 안에 한국어 버젼의 MainMenu.xib이 위치합니다. 각 nib마다 컨트롤의 타이틀과 텍스트를 해당언어로 변경하면 됩니다.

어플리케이션이 실행되면 시스템에 설정된 현재언어를 우선으로 해당 nib가 존재할 경우에는 그 언어의 nib 파일이 로드됩니다.

nib에 대해 자세한 사항은 ADCResource Programming Guide 문서를 참조하시기 바랍니다.

'기타' 카테고리의 다른 글

아이팟 터치 2세대  (8) 2008.10.10
OS X 루트계정 활성화  (6) 2008.10.08
nib 파일 둘러보기  (7) 2008.09.01
OS X의 번들(Bundle) 둘러보기  (2) 2008.08.28
맥 OS X에서 CHM 파일 보기  (4) 2008.08.19
ClassDumper - 응용프로그램 Class Viewer  (0) 2008.08.07