NSApp terminate:id被弃用了吗?

9
我一直在寻找如何以编程方式终止我的应用程序。我在许多主题中发现人们使用NSApp terminate:id
在Xcode中,terminate:id被划掉了。这个方法已经过时了吗?如果不是,我该怎么终止我的应用程序?如果不是,应该使用哪种方法? 更新: 当我说它被划掉时,我的意思是这样的图片: enter image description here

我只是调用了 exit() 函数 (文档) - progrmr
5
在Cocoa应用中,您应该调用-terminate:。这对于观察NSApplicationWillTerminateNotification的内容很重要,其中可能包括框架中的东西。终止时工作的一个例子是解析已承诺到剪贴板的数据。 - Ken Thomases
@Ken:好知道,谢谢!那就使用 Terminate 吧。我习惯了 iOS,那里是不允许使用 terminate 的。 - progrmr
2个回答

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

不,未被弃用


终止:

终止接收器。

- (void)terminate:(id)sender

参数

sender

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

讨论

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

调用此方法时,会执行多个步骤来处理终止请求。首先,它会询问应用程序的文档控制器(如果存在)以保存其文档中未保存的更改。在此过程中,文档控制器可以根据用户输入取消终止操作。如果文档控制器没有取消操作,则该方法将调用委托的applicationShouldTerminate:方法。如果applicationShouldTerminate:返回NSTerminateCancel,则终止进程被中止并将控制权交还给主事件循环。如果该方法返回NSTerminateLater,则应用程序在NSModalPanelRunLoopMode模式下运行其运行循环,直到使用值YESNO调用replyToApplicationShouldTerminate:方法。如果applicationShouldTerminate:方法返回NSTerminateNow,则该方法将向默认通知中心发布一个NSApplicationWillTerminateNotification通知。
不要费心在应用程序的main()函数中放置最终清理代码-它永远不会被执行。如果需要清理,请在委托的applicationWillTerminate:方法中执行清理。

可用性

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

另请参见

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

相关示例代码

  • BlastApp
  • PreLoginAgents

声明于

NSApplication.h


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接