0

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

我遇到了这个问题,但我想那是针对 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

4 回答 4

6

Implement - (void)applicationWillTerminate:(NSNotification *)notification on your AppDelegate and it will be called just before the application will terminate

So the Implementation of your AppDelegate could look something like:

@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
于 2013-07-05T12:45:42.070 回答
0

您的 App Delegate 应该实现 - (void)applicationWillTerminate:(NSNotification *) 通知以获取通知

(或者)

如果清理失败,您可以实现 applicationShouldTerminate 并执行文件清理并返回适当的 NSApplicationTerminateReply

于 2013-07-05T12:49:11.110 回答
0

如果你想使用通知,你应该观察NSApplicationWillTerminateNotification.

于 2013-07-05T12:49:23.907 回答
0
NSApplication *app = [NSApplication sharedApplication];
[[NSNotificationCenter defaultCenter]
 addObserver:self
 selector:@selector(applicationWillTerminate:)
 name: NSApplicationWillTerminateNotification object:app];  
/*A notification named NSApplicationWillTerminateNotification.*/
- (void)applicationWillTerminate:(NSNotification *)notification
{

}
于 2013-07-05T12:52:15.873 回答