ios - 带后台循环的 for 循环,有完成吗?

标签 ios objective-c swift for-loop dispatch-async

我想使用后台代码运行一个for循环,一旦它完成对每个项目的迭代,就会发生一些事情。在没有后台代码的情况下执行此操作很简单,如下所示:

for aString: String in strings {
    if string.utf8Length < 4 {
        continue
    }

    //Some background stuff
}

//Something to do upon completion

但是在其中包含后台代码意味着完成后执行的代码将在处理所有项目之前执行。

for aString: String in strings {
    if string.utf8Length < 4 {
        continue
    }

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)) {
        //Some background stuff
    }
}

//Something to do upon completion

我想知道是否可以这样做。

最佳答案

考虑使用调度组。这提供了一种在分派(dispatch)任务完成时通知您的机制。因此,不要使用dispatch_async,而是使用dispatch_group_async:

let group = dispatch_group_create();

for aString: String in strings {
    if aString.utf8Length >= 4 {
        dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)) {
            //Some background stuff
        }
    }
}

dispatch_group_notify(group, dispatch_get_main_queue()) {
    // whatever you want when everything is done
}

仅供引用,这里是相同想法的操作队列再现(尽管​​限制了并发操作的数量)。

let queue = NSOperationQueue()
queue.name = "String processing queue"
queue.maxConcurrentOperationCount = 12

let completionOperation = NSBlockOperation() {
    // what I'll do when everything is done
}

for aString: String in strings {
    if aString.utf8Length >= 4 {
        let operation = NSBlockOperation() {
            // some background stuff
        }
        completionOperation.addDependency(operation)
        queue.addOperation(operation)
    }
}

queue.addOperation(completionOperation)

关于ios - 带后台循环的 for 循环,有完成吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28649694/

相关文章:

ios - 将视频上传到 iPhone 画廊中的特定相册

ios - 尽管在属性检查器中启用了分隔线,但它不会显示在自定义 tableView 单元格下

objective-c - Quicklook/QLPreviewController 委托(delegate)方法未在 iOS 10 Xcode 8 中调用

objective-c - 应用程序启动时立即执行任务

ios - 夏令时 UIDatePicker 问题

ios - 从 Parse Server Query 检索数据不起作用?

ios - 将图像数组下载为字节数组并转换为图像

ios - 如何从推送通知中获取内容?

ios - swift 3 : Back to last ViewController with sending data

ios - 无法使用 JSON 解码器解析 JSON