【发布时间】:2013-09-11 05:24:19
【问题描述】:
我正在尝试执行两步流程:
- 同时上传照片
- 用户输入然后发布内容
,这与“添加照片”时 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,因为它具有默认并发。
由于文档,我担心死锁/阻塞:
调用时,此方法会阻塞当前线程并等待接收者的当前和排队操作完成执行。当当前线程被阻塞时,接收器继续启动已经排队的操作并监视那些正在执行的操作。在此期间,当前线程无法向队列添加操作,但其他线程可以。一旦所有挂起的操作都完成了,这个方法就会返回。
如果队列中没有操作,则该方法立即返回。
谢谢!
【问题讨论】:
-
再次阅读文档。看来我可以将第二个任务交给
addDependency,以上传所有照片NSOperation。我不确定您是否可以有多个相关任务。这也意味着如果没有可依赖的,我可以做一个简单的operationCount。 -
我不应该依赖默认值吗?我想这也取决于连接的类型。
-
..请在此处分享您的更新代码,以便在 xcode 工作区中逐步使用上传图片
标签: ios objective-c queue nsoperationqueue