我一直在寻找如何以编程方式终止我的应用程序。我在许多主题中发现人们使用NSApp terminate:id
。
在Xcode中terminate:id
被越过。这种方法是否已被弃用?我应该用它来终止我的申请吗?如果没有哪种方法可以做到这一点?
更新 当我说它越过时我的意思的图片:
答案 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)
终止接收器。
- (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
NSApplication.h