9

我一直在寻找如何以编程方式终止我的应用程序。我在许多主题中发现人们使用NSApp terminate:id.

在 Xcodeterminate:id中是交叉的。这种方法是否已弃用?我应该用它来终止我的应用程序吗?如果没有,这是正确的方法吗?

更新: 当我说它被交叉时,我的意思是: 在此处输入图像描述

4

2 回答 2

19

我没有看到它terminate已被弃用。编译器警告的一个可能原因可能是

[NSApp terminate:sender]

NSApp返回一个 general id,以便编译器不知道terminate实际意味着哪个消息。确实,如果我使用“跳转到定义”,Xcode 会跳转到

@protocol NSInputServiceProvider
...
- (void) terminate:(id)sender NS_DEPRECATED_MAC(10_0, 10_6);

但是如果你使用等效的代码

[[NSApplication sharedApplication] terminate:sender];

然后编译器警告消失。

于 2013-04-06T16:41:47.003 回答
1

不,不推荐使用


终止:

终止接收器。

- (void)terminate:(id)sender

参数

发件人

通常,此参数包含发起终止请求的对象。

讨论

当用户从应用程序的菜单中选择退出或退出时,通常会调用此方法。

调用时,此方法执行几个步骤来处理终止请求。首先,它要求应用程序的文档控制器(如果存在)保存其文档中所有未保存的更改。在此过程中,文档控制器可以响应来自用户的输入取消终止。如果文档控制器没有取消操作,则此方法然后调用委托的applicationShouldTerminate:方法。如果applicationShouldTerminate:返回NSTerminateCancel,则终止过程中止并将控制权交还给主事件循环。如果方法返回NSTerminateLater,应用程序在模式下运行它的运行循环,NSModalPanelRunLoopMode直到replyToApplicationShouldTerminate:使用值YESor调用方法NO。如果该applicationShouldTerminate:方法返回NSTerminateNow,则该方法发布一个NSApplicationWillTerminateNotification通知到默认通知中心。

不要费心将最终的清理代码放入应用程序的main()函数中——它永远不会被执行。如果需要清理,请在委托的applicationWillTerminate:方法中执行清理。

可用性

在 OS X v10.0 及更高版本中可用。

也可以看看

  • – run
  • – stop:
  • – applicationShouldTerminate:(NSApplicationDelegate)
  • – applicationWillTerminate:(NSApplicationDelegate)
  • – replyToApplicationShouldTerminate:
  • NSApplicationWillTerminateNotification

相关示例代码

  • 爆炸应用
  • 登录前代理

宣布于

NSApplication.h

于 2013-04-06T16:40:42.013 回答