'2011/01/27'에 해당되는 글 1건

  1. 2011.01.27 Window-based Application와 View-based Application의 차이점
Window-based Application은 XCODE에서 아이폰용 어플리케이션 프로젝트 템플릿을 선택할때 코코아터치 클래스기반으로 작성할 수 있는 가장 기본적인 템플릿이다. XCode 프로젝트 화면을 처음으로 접했을때 Window-based Application과 View-based Application 의 차이점이 도대체 무엇인가 하고 느낀적이 있을 것이다. Window-based Application로 우선 프로젝트를 생성한후 뷰를 하나 추가하면 View-based Application로 선택한 것과 똑같이 만들어 지는데 수작업을 통하여 뷰를 넣어 봄으로써 그 차이점을 알아보자.

<그림1> 템플릿 선택

 그림1과 같이 Windows-based Application을 선택한후  Sample이라 프로젝트명으로 프로젝트를 생성하면 다음과 같은 파일이 생성된다. 

<그림2> 자동으로 생성된 파일

주목해서 보아야 하는 것은 다음 3가지이며 3개의 파일이 한세트이다..

  • SampleAppDelegate.h
  • SampleAppDelegate.m
  • MainWindow.xib
  • 여기서 뷰를 하나 추가하면 View-based Application 이 되는데 수동으로 View를 추가해 보기로 하겠다.

    상단의 메뉴에서 File > New File 을 선택한다. Cocoa Touch Class 를 선택한 다음 UIViewController subclass를 선택한다. 그리고 아래의 옵션에서 With XIB for user interface 를 같이 첵크해서 클래스파일을 생성할때 XIB 파일도 같이 자동으로 추가되도록 한다. 클래스 이름을 SampleViewController 라고 입력한 다음 Finish 버튼을 누른다.

    추가되어진 다음 3가지이며 역시 3개의 파일이 한세트이다..

  • SampleViewController.h
  • SampleViewController.m
  • SampleViewController.xib
  • View Class 파일을 추가했지만 파일만 생성되어 있을뿐 아직까진 메인 윈도우와 어떠한 연결 고리도 가지고 있지 않다. 이제 SampleAppDelegate.h 과 SampleAppDelegate.m 파일을 수정해서 뷰를 수작업으로 연결을 시켜야 된다.

    SampleAppDelegate.h파일을 열어보자

    @class SampleViewController;


    @interface SampleAppDelegate : NSObject <UIApplicationDelegate> {

        UIWindow *window;

        SampleViewController *viewController;

    }


    @property (nonatomic, retain) IBOutlet UIWindow *window;

    @property (nonatomic, retain) IBOutlet SampleViewController *viewController;


    @end

    클래스 정의부 안에 파란색으로 칠해진 부분이 새로 추가된 부분이다. SampleViewController를 선언해주고 있다.

    SampleAppDelegate.m 파일을 수정하자..

    #import "SampleAppDelegate.h"

    #import "SampleViewController.h"


    @implementation SampleAppDelegate


    @synthesize window;

    @synthesize viewController;



    #pragma mark -

    #pragma mark Application lifecycle


    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

        

        // Override point for customization after application launch.


        // Add the view controller's view to the window and display.

        [self.window addSubview:viewController.view];

        [self.window makeKeyAndVisible];


        return YES;

    }


    - (void)dealloc {

        [viewController release];

        [window release];

        [super dealloc];

    }


    어플리케이션의 실행준비를 완료되었을때 호출되는 didFinishLaunchingWithOptions 에서 AddSubView 함수를 호출해서 ViewController의 View를 추가한다. 그리고 윈도우가 종료될때 window를 release 해주기 전에 viewController를 종료하는 부분을 추가해주어야 한다. 윈도에서 뷰를 추가하는 위의 코드는 기타 다른 뷰를 추가하는 코드에서 자주 응용되는 코드이니 눈여겨 볼 필요가 있다.

    아울렛 연결

    SampleAppDelegate.h의 내용중 viewController는 인터페이스 빌터에서 작성하는 MainWindow.xib 파일에서 참조할 수 있도록 IBOutlet 참조자가 추가 되어 있다. 즉, 인터페이스 빌터에서 연결작업을 한번더 해주어야 한다.

     @property (nonatomic, retain) IBOutlet Sample2ViewController *viewController;

    Groups & Files 에서 MainWindow.xib 를 더블클릭하면 인터페이스 빌더가 열려진다.


    중간의  ViewMode를 변경하면 Type를 알기쉽게 보여준다.


    4개의 객체중 Sample App Delegate 를 한번 클릭한 후 두번째 탭 우화살표모양의 Connections 화면을 본모습이다. Sample App Delegate는 현재 SampleAppDelegate 자기 자신을 가르키며 단 멤버 함수 viewController와 window를 볼수 있다. 이 두가지 멤버는 IBOutlet 지시자를 표기했기 때문에 인터페이스 빌더에서 아래의 화면과 같이 Outlet 으로 인지하고 있다. 현재 window 랑 MainWindow.xib 파일에 Window 랑 연결되어 있으나 새로 추가한 ViewController 는 연결이 되어 있지 않다.


    라이브러리 윈도우에서 Classes 를 열어서 찾아보면 위에서 작성한 뷰 클래스의 SampleViewController 를 찾을 수 있다. SampleViewController를 클릭한후 마우스로 드랙해서 MainWindow.xib 화면에 추가하면 아래와 같이 Sample view Controller가 추가된다.
     

    MainWindows.xib의 Sample App Delegate 를 클릭한후 Connections 창을 열고 viewController 의 오른쪽 동그라미에 마우스를 오버 시키면 + 모양으로 바꾼다. 이것을 드래그해서 다시 왼쪽 윈도우 MainWindow.xib에서 Sample View Controller 객체 윗부분에 드롭시키면 아래의 그림과 같이 viewController 는 라이브러리에서 추가한 Sample View Controller 와 연결이 완료된다.


    이제 인터페이스 빌더에서 작업이 끝났기 때문에 Xcode 화면으로 복귀하기 전에 반드시 저장을 시켜야 된다.
    이렇게 수작업한 코드는 프로젝트 템플릿중 Sample이란 프로젝트명으로 View-based Application을 선택한 프로젝트랑 똑같다.
    Posted by tklee

    댓글을 달아 주세요