2009-10-27 5 views
0

펜촉을로드하기 전에 최대한 빨리 종료하고 싶습니다. 내가 시도한 [NSApp stop:self]하지만 그 작동하지 않았다. 내 과정을 얻고 그것을 죽이는 것보다 더 좋은 방법이 있습니까? 자세한 내용을 모른 채때로는 내 코코아 앱 실행을 중지하고 싶습니다. 어떻게 init에서 멈추게합니까?

(나는 그것을 할 수있는 이상한 것은 알고있다. 그것은 좋은 이유입니다.)

+1

언제 그만 둘 것인지 알고 있습니까? main()에있을 수 있습니까? 플러그인을로드해야합니까? Cocoa 프레임 워크를 사용 하시겠습니까? 누구나 특정 답변을 제공하기 전에 상황에 대해보다 구체적으로 설명해야합니다. –

+0

내 응용 프로그램 대리자 init 메서드에서 종료 생각하고 있었지만 main에서 처리 할 수 ​​있습니다. – zekel

답변

3

, 나는 NSApplicationMain

int main(int argc, char **argv) 
{ 
    if(shouldExit() == YES) 
    { 
     exit(exitCode); 
    } 

    return NSApplicationMain(argc, (const char **) argv); 
} 
+0

이 작업을 수행 할 수도 있습니다. :) –

+2

'shouldExit()'가 Cocoa 프레임 워크를 사용한다면'NSAutoreleasePool'이 없기 때문에 autoreleased 오브젝트가 누출 될 수 있습니다. –

3
[[NSRunningApplication currentApplication] terminate]; 
를 호출하기 전에 main()에 검사 코드를 넣어 말 것

Apple docs here. forceTerminate을 사용할 수도 있습니다. nall 님의 제안을 사용할 수도 있지만 앱을 종료해야하는지 확인하기 위해 작업 할 수있는 경우에만 작동합니다 (main()). 그렇지 않으면 내가 제안한 것의 라인을 따라 뭔가를 더해야 할 것입니다.

+0

당신도 이것을 할 수 있습니다. :) – nall

+0

나는이 방법을 호출 할 수있을 때에는 적어도 앱의 기본 메뉴 인 NIB가로드 될 것이라고 확신합니다. –

+0

nibs가로드되기 전에 (예 :'applicationWillFinishLaunching'에서) 그의 'NSApplicationDelegate' 클래스에서 호출 할 수 있습니다. –

0

이 작동합니다 :

[[NSApplication sharedApplication] terminate: nil]; 

Reference

+1

이 메서드를 호출하면 공유 응용 프로그램이 초기화되므로 최소한 MainMenu.nib (또는 응용 프로그램의 기본 메뉴 NIB가 호출 된 것)이로드됩니다. –

1

당신이 앱의 main() 기능은 "가장 빠른"장소 수정, 쉽게 종료 할 것을 감지 할 수있는 경우 :

int main(int argc, char **argv) 
{ 

    id pool = [[NSAutoreleasePool alloc] init]; //needed if shouldExit() uses Cocoa frameworks 

@try { 
    if(shouldExit()) { 
     exit(0); //appropriate exit code, depending on whether this "fast" exit is normal or exceptional 
    } 
    } 
    @finally { 
    [pool drain]; 
    } 

    return NSApplicationMain(argc, (const char **) argv);; 
} 
+0

NSApplicationMain() 호출 이전에 풀이 빠지지 않아도 상관 없습니까? 또는 그것은 중요하지 않습니까? –

+0

나는 그것이 중요하다고 생각하지 않는다. NSApplicationMain은 다른 자동 회수 풀을 풀 스택으로 푸시합니다. – nall

+0

NSApplicationMain()이 예외를 throw하면 잠재적 인 메모리 누수가 발생할 수 있습니다. 어쨌든 앱이 종료 될 것이므로 문제가되지 않습니다. 하지만 어쨌든 사물을 수정하겠습니다. –

관련 문제