如何在Cocoa应用程序内部告诉应用程序退出?

35

我正在寻找一种好的方式来告诉我的Cocoa应用程序退出。请放心,这不会用于生产代码。我只是想在调试过程中运行一个测试然后关闭应用程序,寻找一种简单的方法。

我发现 exit(0); 可以关闭应用程序,但它会绕过所有正常的应用程序退出程序,我希望保留所有的正常退出流程。

实质上,我希望当我完成我的测试后,事情能够像用户从菜单中选择“退出”一样工作,但我希望它在自动化过程中发生。

我的代码目前看起来像这样:

#if (SUPERFANCY_TESTING_MODE)
    [self doSomething];
    exit(0); // <-- I need something better to go here
#endif

3
当然,DoSomething 应该改为 doSomething - bbum
1个回答

86

你可以放心地认为你的应用程序至少会被终止一次。因此,防止像 exit(0); 这样的退出方式是必要的。

但是,NSApplication 实现了 -terminate: 方法。

[NSApp terminate: nil]; 应该可以达到你想要的效果。

我通常建议使用 -performSelector:afterDelay: 发布它,并将延迟设置为 0.0,以强制它在下一次事件循环中发生。

示例:

[NSApp performSelector:@selector(terminate:) withObject:nil afterDelay:0.0];

31
对于那些像我一样比较迟钝(笨)的人,可能无法准确地理解语法(我总是忘记在 terminate 后面加上冒号),完整的代码应该是:[NSApp performSelector:@selector(terminate:) withObject:nil afterDelay:0.0];。 - BarrettJ
1
这些天,dispatch_async 可能是更好的方式来处理这个问题。 - Tamas Czinege
1
@emreoktem,但这并不会强制它在下一次事件循环中发生。 - bbum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接