AppleApp/Cocoa Touch2010. 7. 8. 14:50
아이폰 인터페이스는 크게 세 가지로 구성된다.
하나는 UIWindow, 다른 하나는 UIViewController, 마지막으로 UIView이다.

아이폰 어플리케이션에서는 AppDelegate를 통하여(말 그대로 application인스턴스의 일부분을 위임한 것이다.)
하나의 (UIWindow *)window인스턴스만을 가질 수 있다.

이 window인스턴스만으로는 아무것도 할 수가 없으며,
사용자에게 실질적인 내용을 보여주기 위해서는 (UIView *)view가 필요하다.
window인스턴스에 view를 띄우기 위해서는 다음과 같은 코드를 이용하면 된다.
[window addSubview:view];

하지만 이와 같은 방식은 그저 그림 보여주기일 뿐 view에서는 사용자의 이벤트를 처리한다거나 하는 일련의 작업들을 처리할 수 가 없다. (물론 프로그래머에 따라 - 특히 게임 프로그래머 - view에다가 이벤트 처리 메소드를 넣는 경우도 있다.) 이를 위해서 (UIViewController *)viewController를 사용하게 된다.
이를 사용하기 위한 방법은 (UIViewController *)viewController인스턴스에 작성된 view를 연결시키기만 하면 된다. (viewController.view에 (UIView)view인스턴스의 주소값을 복사하면 된다.) 
window인스턴스에 view를 띄우기 위해서는 다음과 같은 코드를 이용하면 된다.
[window addSubview:viewController.view];
이벤트처리까지 하고자 한다면 ViewController.m에 이벤트 처리를 위한 메소드만 추가하면 된다.

UIViewController클래스가 view인스턴스를 하나만 제공하기 때문에 하나의 viewController인스턴스에 하나의 view인스턴스라는 인식이 강하지만, 개발 형태에 따라 하나의 viewController에 여러 (UIView *)인스턴스를 하위로 연결할 수도 있고(view로부터 이벤트를 받아서 다른 view인스턴스로 전환하는 메소드를 실행한다.) viewController에 하위로 다른 (UIViewController *)인스턴스를 연결할 수도 있다.

그래서 이 세 가지 인터페이스 중점 요소에 대하여서는 다음과 같이 이해하면 쉽다.
1. UIWindow: 어플리케이션이 보여지기 위한 창
2. UIView: 어플리케이션이 보여주는 실제 내용물
3. UIViewController: 내용물과 관련한 이벤트 처리기
Posted by studio2b 마이클

댓글을 달아 주세요

  1. 좋은 정보 고맙습니다.

    2011.08.20 16:14 [ ADDR : EDIT/ DEL : REPLY ]

AppleApp/Cocoa Touch2010. 7. 8. 14:09
어플리케이션이 시작되면 (UIApplication *)application인스턴스를 생성하고 application이 소유한 메인 NIB(.nib 또는 .xib확장자로 Next Interface Builder의 약자이다.)파일을 찾아서 로드하게 된다. 이 파일은 프로젝트 내의 Info.plist 중 Main nib file base name 항목에 정의된 값을 기준으로 찾아낸다. 이렇게 찾아낸 NIB파일에서 정보를 읽어들여 (UIApplication *)application과 연결된 모든 객체를 불러온다.

1. (UIApplication *)application인스턴스가 Info.plist를 통해서 메인 NIB파일을 찾는다.

2. 메인 NIB파일에서 UIApplication 클래스의 (NSObject *)delegate인스턴스에 연결된 AppDelegate클래스를 찾는다.

3. AppDelegate 클래스에서 (UIWindow *)window인스턴스에 연결된 Window클래스를 찾는다.

4. AppDelegate 클래스에서 (UIViewController *)viewController인스턴스에 연결된 ViewController클래스를 찾는다.

5. ViewController클래스는 view인스턴스(UIViewController에서 상속받는다.)에 연결된 View클래스를 찾는다.

6. 모든 파일 찾기가 끝나면 application인스턴스가 delegate인스턴스에 applicationDidFinishLaunching메서드를 호출한다.
(iPhone SDK 4이후에서는 application:didFinishLaunchingWithOptions:도 호출한다.)

7. 현재 사용중인 viewController인스턴스의 안에 생성된 메서드에 따라 작동한다.

위의 내용은 사실 프로젝트 파일 내에서 보이는 대략적인 개괄만을 늘어놓은 것이다. 실제로 프로그램이 돌아갈 때에는 눈에 보이지 않는 많은 절차들이 지나가며, 이 절차들은 Xcode에서 Debug Console을 열면 확인할 수 있다.
Posted by studio2b 마이클

댓글을 달아 주세요