退出应用程序的方式之间的区别:exit()、NSApp/NSApplication 终止
Posted
技术标签:
【中文标题】退出应用程序的方式之间的区别:exit()、NSApp/NSApplication 终止【英文标题】:Difference between ways to quit an application: exit(), NSApp/NSApplication terminate 【发布时间】:2014-08-12 07:23:21 【问题描述】:我在网上查找了如何退出应用程序,但我发现了很多相互矛盾的答案。不同的人提出了以下建议,每个人都有不同的原因:
exit(0);
[NSApp terminate:self];
[NSApp terminate:nil];
[[NSApplication sharedApplication] terminate:self];
作为 Objective-C 的新手,所有这些对我来说似乎都很合理。每种方法何时最适合使用?
【问题讨论】:
除了第一个选项,我很确定他们都做同样的事情,应该都能正常工作。 是的,普遍的共识似乎是你永远不应该退出(0)。为什么 exit(0) 这么糟糕? 【参考方案1】:所有这些:
[NSApp terminate:self];
[NSApp terminate:nil];
[[NSApplication sharedApplication] terminate:self];
做同样的事情。 NSApp
是一个保存应用程序对象的全局变量。 [NSApplication sharedApplication]
返回应用程序对象,或者,如果这是第一次调用,则创建它然后返回它。如果您正在考虑退出应用,这几乎肯定不是第一次调用。
-terminate:
方法忽略参数 (sender
)。它需要一个参数的唯一原因是它是一个动作方法,这是动作方法的一般形式。
请注意,-terminate:
不会简单地退出应用程序。如果已实现,它将调用应用程序委托的 -applicationShouldTerminate:
方法。根据返回码,代表可以取消终止或推迟决定。如果决定被推迟,应用程序将在等待它的特殊模式下运行。
最后,如果应用程序确实(最终)终止,NSApplication
将发布NSApplicationWillTerminateNotification
通知。如果应用程序委托实现-applicationWillTerminate:
,则将作为发布该通知的结果调用。代表可以做一些最后的清理。除了委托之外,该通知的任意其他观察者都希望有机会进行清理。
致电exit(0)
不会提供任何机会。
【讨论】:
谢谢!如果您不介意,那么直接将退出按钮链接到终止:在 XCode 中呢?和 exit(0) 的效果一样吗? 不调用-terminate:
与exit(0)
的效果相同。您可以将按钮连接到-terminate:
操作方法。这就是为什么它是一种行动方法。标准退出菜单项连接到-terminate:
。连接到它的按钮的行为与该菜单项完全相同。以上是关于退出应用程序的方式之间的区别:exit()、NSApp/NSApplication 终止的主要内容,如果未能解决你的问题,请参考以下文章
调用“ret”与调用sys_exit数字程序集gcc之间有什么区别
python中 os._exit() 和 sys.exit(), exit和exit 的用法和区别
程序代码中退出函数exit()与返回函数return ()的区别