退出应用程序的方法之间的区别:exit(),NSApp / NSApplication终止

时间:2014-08-12 07:23:22

标签: objective-c cocoa

我查找了如何在线退出应用程序,并且我发现了许多相互矛盾的答案。不同的人提出以下建议,每个都有不同的原因:

exit(0);

[NSApp terminate:self];

[NSApp terminate:nil];

[[NSApplication sharedApplication] terminate:self];

成为Objective-C的新手,所有这些对我来说都很合理。每种方法何时最适合使用?

1 个答案:

答案 0 :(得分:16)

所有这些:

[NSApp terminate:self];

[NSApp terminate:nil];

[[NSApplication sharedApplication] terminate:self];

做同样的事情。 NSApp是一个保存应用程序对象的全局变量。 [NSApplication sharedApplication]返回应用程序对象,如果这是第一次调用,则创建它,然后返回它。如果你正在考虑退出应用程序,这几乎肯定不是第一次打电话。

-terminate:方法忽略参数(sender)。它采用论证的唯一原因是它是一种行动方法,这是行动方法的一般形式。

请注意,-terminate:不会简单地退出应用。如果实施,它将调用app delegate的-applicationShouldTerminate:方法。根据返回代码,代表可以取消终止或推迟决定。如果决定延期,则应用程序将以特殊模式运行,等待它。

最后,如果应用确实(最终)终止,NSApplication将发布NSApplicationWillTerminateNotification通知。如果应用程序委托实现-applicationWillTerminate:,那么将通过发布该通知来调用该代理。代表可以做一些最后的清理工作。除了委托之外,该通知的任意其他观察者都希望有机会进行清理。

调用exit(0)不提供任何机会。