4

我正在开发一个 iPad 应用程序。它使用 NSOperation 在后台下载一些东西,由 NSOperationQueue 处理。我发现,除非我向 NSOperation 添加保留,否则在执行操作操作后我会崩溃。NSOperationQueue 的 addOperation 表示它保留了 NSOperation,而 NSOperation 本身保留了目标对象。因此,我不明白为什么需要我的额外保留。

这不会阻碍我的进步,除非我试图实现取消异步操作并在其位置创建一个新操作的模式。我还不能在 iPhone OS 4.0 上进行开发(它提供了 waitUntilFinished),所以我需要另一种方法来知道释放我的额外保留是安全的(或者找到一种根本没有额外保留的方法)。

有什么建议么?

4

2 回答 2

1

您如何执行“在后台下载内容”任务?如果您使用的是回调 NSOperation 对象的异步方法,那可能是您的问题。我的猜测是,在您的 NSOperation 的主要方法中,您正在使用异步方法开始下载,并且该方法应该稍后回调您的 NSOperation。问题是,一旦您的 main 方法返回,NSOperation 就被认为已完成,因此当您的异步下载尝试回调您的 NSOperation 时,它将失败,因为 NSOperation 已经完成并释放。即使在 NSOperationQueue 完成后,您的额外保留也可以通过保留 NSOperation 来解决此问题。您必须通过在 NSOperation 中使用同步下载方法来解决此问题。

如果您已经在 NSOperation 中使用同步下载方法,那么我不确定您的问题可能是什么。

于 2010-06-28T19:02:46.863 回答
0

在 ASIHTTPRequest 框架内使用队列和异步请求 - http://allseeing-i.com/ASIHTTPRequest/ - 帮助我解决了很多我在使用 NSOperationQueues 和许多异步下载时遇到的问题。

我的态度是,如果一个问题已经解决了,并且已经解决好了,就不要再尝试解决它了!

于 2010-06-28T19:30:35.150 回答