我正尝试执行两个步骤:
,这非常类似于当您添加照片"
时Facebook应用的工作方式我想首先使用默认的NSOperationQueueDefaultMaxConcurrentOperationCount
开始在后台上传照片。这些操作将返回我需要与第二篇文章一起发送的一些信息。
但是,由于应用程序的性质和并发性,如何在满足以下条件的情况下以发布内容的方式构建它:
可能会发生以下几种情况:
我想我应该创建照片上传NSOperationQueue
并检查operationCount
。如果它= = 0,则当用户点击UIButton
时,应立即发布内容。
但是,如果照片上传未完成,我该如何等待?我应该在伪代码中以下列方式使用waitUntilAllOperationsAreFinished
:
// User taps on UIButton to post his content and this is in a ViewController
- void postMyContent:
{
[self.photoUploadQ.waitUntilAllOperationsAreFinished]
// Post my content now
}
这是对的吗?我无法将第二个任务添加到photoUploadQ
,因为它具有默认并发性。
由于文档问题,我担心死锁/阻塞:
调用时,此方法会阻塞当前线程,并等待接收方的当前和排队操作完成执行。当前线程被阻塞时,接收器继续启动已经排队的操作并监视正在执行的操作。在此期间,当前线程无法向队列添加操作,但其他线程可能。完成所有挂起操作后,此方法将返回。
如果队列中没有操作,则此方法立即返回。
谢谢!
答案 0 :(得分:1)
一个常见的操作队列模式是创建一个操作(在您的情况下,“post content”操作),这取决于完成一系列其他操作(在您的情况下,“图像上传”操作) NSOperation
方法,addDependency
。这样,虽然队列可能是并发的,但这个“发布内容”操作将不会开始,直到其他“图像上传”操作完成。
您可能还希望将操作队列限制为小于NSOperationQueueDefaultMaxConcurrentOperationCount
的值,因为NSURLConnection
通常只允许5个左右的并发操作(如果你做的更多,那么其中一些可能最终超时)。