我正在尝试执行一个两步过程:
- 并发上传照片
- 用户输入然后发布内容
,这与“添加照片”时 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
因为它具有默认并发性。
由于文档,我担心死锁/阻塞:
调用时,此方法会阻塞当前线程并等待接收者的当前和排队操作完成执行。当当前线程被阻塞时,接收器继续启动已经排队的操作并监视那些正在执行的操作。在此期间,当前线程无法向队列添加操作,但其他线程可以。一旦所有挂起的操作都完成了,这个方法就会返回。
如果队列中没有操作,则此方法立即返回。
谢谢!