NSApp是否终止:id已弃用?

时间:2013-04-06 16:27:07

标签: objective-c macos cocoa nsapplication

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

在Xcode中terminate:id被越过。这种方法是否已被弃用?我应该用它来终止我的申请吗?如果没有哪种方法可以做到这一点?

更新 当我说它越过时我的意思的图片: enter image description here

2 个答案:

答案 0 :(得分:19)

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

[NSApp terminate:sender]

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

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

但是如果你使用等效代码

[[NSApplication sharedApplication] terminate:sender];

然后编译器警告就消失了。

答案 1 :(得分:1)

Nope, not deprecated


终止:

终止接收器。

- (void)terminate:(id)sender

参数

发送方

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

讨论

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

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

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

状况

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

另请参阅

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

相关示例代码

  • BlastApp
  • PreLoginAgents

中声明

NSApplication.h