在程序退出之前注册要调用的函数

时间:2013-07-05 12:36:55

标签: objective-c macos cocoa

所以我需要在OSX上注册一个函数(使用Xcode / objective C),它将在程序终止时注册要调用的特定函数。

我遇到了this,但我猜这是针对iOS而不是针对OSX。

我用NS替换了UI并给了它一个镜头,但它没有用。

NSApplication *app = [NSApplication sharedApplication];
[[NSNotificationCenter defaultCenter]
 addObserver:self
 selector:@selector(applicationWillTerminate:)
 name:BeCalledOnExit object:app];

但这不是编译。它在名称上写了一些内容:当它显然在.h&上时,它是一个未声明的标识符。函数前的.m文件。

我遇到了另一个用过这个的小伙伴:

-(BOOL) applicationShouldTerminateAfterLastWindowClosed:(NSApplication *) sender{
return TRUE
}

但它对我不起作用,因为我的应用程序是一个完整的状态栏应用程序。

基本上我在我的应用程序中创建一些临时文件,就在退出之前,我想确保我的应用程序正在清除这些文件。我把它放在/ tmp / ..不想要太多空间。

我真的想要一个像gcc / python,

这样的解决方案
atexit(functionName);

4 个答案:

答案 0 :(得分:6)

在您的AppDelegate上实施- (void)applicationWillTerminate:(NSNotification *)notification,它将在应用程序终止之前被调用

因此,AppDelegate的实现可能类似于:

@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    // Insert code here to initialize your application
    NSLog(@"I FINISHED LAUNCHING!");
}

- (void)applicationWillTerminate:(NSNotification *)notification
{
    NSLog(@"I WILL TERMINATE NOW!!!");
}
@end

答案 1 :(得分:0)

您的应用代表应实施 - (void)applicationWillTerminate:(NSNotification *)通知以获取通知

(OR)

如果清理失败,您可以实施applicationShouldTerminate并执行文件清理并返回相应的NSApplicationTerminateReply

答案 2 :(得分:0)

如果您想使用通知,则应该观察NSApplicationWillTerminateNotification

答案 3 :(得分:0)

NSApplication *app = [NSApplication sharedApplication];
[[NSNotificationCenter defaultCenter]
 addObserver:self
 selector:@selector(applicationWillTerminate:)
 name: NSApplicationWillTerminateNotification object:app];  
/*A notification named NSApplicationWillTerminateNotification.*/
- (void)applicationWillTerminate:(NSNotification *)notification
{

}