태그 보관물: NSApplicationMain

Mac App’s Core Objects

App Life Cycle

여느 C 프로그램과 같이1 OSX앱도 main 함수로부터 시작한다. 이 함수는 단순히 NSApplicationMain() 함수를 다시 호출한다. 대략 이렇게 생겼다.

#import <Cocoa/Cocoa.h>

int main(int argc, const char* argv[]) {
    return NSApplicationMain(argc, (const char**) argv);
}

NSApplicationMain 함수는 앱을 초기화하고 실행할 준비를 한다. 초기화 과정의 일환으로 이 함수는 아래와 같은 작업을 한다.

  1. NSApplication 클래스 객체를 하나 만든다. 이 객체는 +sharedApplication 메소드로 얻을 수 있다.
  2. Info.plist 파일을 읽어들여서 여기에 기록된 NSMainNibFile로부터 nib 파일을 읽어들인다. 만약 스토리보드를 쓰고 있다면 기본 스토리보드를 읽어와서 객체들을 구성한다. UIApplicationMain과는 달리 앱 델리게이트는 기본 Nib 파일에 반드시 포함되어 있어야 한다.
  3. 애플리케이션 객체의 run 메소드를 호출한다. 이로써 론칭과정은 끝나고 앱의 이벤트 처리를 시작한다.

계속 읽기

NSApplicationMain

NSApplicationMain

int NSApplicationMain(int argc, const char* argv[]);

코코아 앱이 실행될 때 main 함수가 곧장 호출하는 함수로, 앱 객체를 생성하고 앱의 런칭 과정을 처리한다. 앱 객체의 클래스는 무조건 NSApplication이며, 앱 델리게이트는 nib 파일 내에 정의되어 있어야 한다. (iOS는 앱 델리게이트 클래스명을 전달하는 인자 부분이 마련되어 있음)

argc, argv 파라미터가 정의되어 있지만, 실제로 값을 전달해도 무시한다. 코코아 내에서는 프로그램 실행시의 arguments를 _NSGetArgv, _NSGetArgc, _NSGetEnviron 함수들을 통해서 얻어야 한다.