我正在开发一款iPad应用。它使用NSOperation在后台下载一些内容,由NSOperationQueue处理。我发现,除非我在NSOperation中添加一个保留,否则我会在执行操作后发生崩溃。 NSOperationQueue的addOperation表示它保留了NSOperation,而NSOperation本身保留了目标对象。因此,我不明白为什么需要额外保留。
这不会妨碍我的进步,除了我试图实现取消异步操作并在其位置创建一个新模式的模式。我还不能在iPhone OS 4.0上开发(提供waitUntilFinished),所以我需要另一种方式知道释放我的额外保留是安全的(或找到一种方法没有额外的保留)。
有什么建议吗?
答案 0 :(得分:1)
您是如何执行'在后台下载某些内容'任务的?如果您使用的是调用NSOperation对象的异步方法,那可能就是您的问题。我的猜测是,在你的NSOperation的主要方法中,你开始使用异步方法下载,并且该方法应该在以后回调你的NSOperation。问题是,一旦你的main方法返回,NSOperation被认为已经完成,所以当你的异步下载尝试回调你的NSOperation时,它会失败,因为NSOperation已经完成并取消分配。你的额外保留通过在NSOperationQueue结束后保持NSOperation来解决这个问题。您必须通过在NSOperation中使用同步下载方法来解决此问题。
如果您已在NSOperation中使用同步下载方法,那么我不确定您的问题是什么。
答案 1 :(得分:0)
在框架ASIHTTPRequest中使用队列和异步请求 - http://allseeing-i.com/ASIHTTPRequest/ - 帮助我解决了NSOperationQueues和许多异步下载时遇到的许多问题。
我认为如果问题得到解决并得到妥善解决,请不要再尝试解决问题了!