3

我有一个基于 NSDocument 的 Cocoa 应用程序,并且当用户关闭文档窗口或应用程序退出时,我需要优雅地终止几个辅助线程(等待它们通过当前循环运行)。我正在使用 canCloseDocumentWithDelegate 在文档关闭时向线程发送一个标志,然后当它们完成时,其中一个调用 [NSDocument close]。当用户关闭文档窗口时,这似乎很有效,但是当您退出应用程序时,它会出现各种错误(在调用任何内容之前崩溃)。这种事情的正确程序是什么?

4

1 回答 1

4

最好的方法是让线程拥有必要的对象,以便线程完成它正在做的任何事情,直到能够中止处理并尽快终止。

在非 GC 下,这意味着-retain线程-releases 完成时。对于 GC,它只是对所需对象的硬引用。

如果有某种冗长的处理必须继续并且必须在文档关闭之前完成,则放下带有进度条的工作表并保持文档模式直到完成(Aperture 和 iPhoto 都是这样做的)。

于 2010-02-22T21:31:27.913 回答