【问题标题】:How can I tell my Cocoa application to quit from within the application itself?如何告诉我的 Cocoa 应用程序从应用程序本身退出?
【发布时间】:2009-11-02 02:29:52
【问题描述】:

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

我发现exit(0); 会关闭应用程序,但它会绕过所有正常的应用程序退出程序,我想保留所有这些程序。

基本上我希望事情就像用户从菜单中拉出“退出”一样工作,但我希望它在我完成测试后自动发生。

我的代码目前如下所示:

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

【问题讨论】:

  • ... 当然,DoSomething 应该是 doSomething....
  • 谢谢,小笨蛋。我已经改了。

标签: cocoa debugging exit


【解决方案1】:

您几乎可以放心,您的应用至少在某些时候会被杀死。因此,需要防范exit(0); 之类的退出

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

[NSApp terminate: nil]; 应该做你想做的事。

我通常建议通过 -performSelector:afterDelay: 发布它,延迟 0.0 以强制它发生在下一次通过事件循环的顶部。

例子:

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

【讨论】:

  • 对于那些密集(像我)并且无法完全正确地获得语法的人(我在终止后一直忘记冒号),整行将显示为:[NSApp performSelector:@selector(终止:) withObject:nil afterDelay:0.0];
  • 现在 dispatch_async 可能是解决这个问题的更好方法。
  • @emreoktem 不过,这不会强制它在下一次通过事件循环时发生。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 2013-01-25
  • 1970-01-01
  • 2011-02-09
  • 2017-01-13
  • 2018-03-26
  • 2014-01-18
相关资源
最近更新 更多