Swift version: 5.6
There are lots of ways to work with Grand Central Dispatch (GCD) on iOS, but OperationQueue
is particularly powerful because it lets you control precisely how many simultaneous operations can run and what quality of service you need, while also letting you schedule work using closures. You can even ask the operation queue to wait until all its operations are finished, which makes scheduling easier.
If you had an array of images you needed to process then save somewhere, you might normally write a loop like this:
for image in images {
process(image)
}
However, that’s single-threaded – it can only use one of the available CPU cores. With only a small change you can get the same behavior working across multiple cores, and the operation queue will wait until it’s all complete so it doesn’t change the meaning of your code:
let queue = OperationQueue()
for image in images {
queue.addOperation {
self.process(image)
}
}
queue.waitUntilAllOperationsAreFinished()
You can add as many operations as you want, but they don’t all get executed at the same time. Instead, OperationQueue
limits the number of operations based on system conditions – if it’s a more powerful device that isn’t doing much right now, you’ll get more operations than a less powerful device or a device that’s busy with other work.
You can override this behavior if you need something specific:
queue.maxConcurrentOperationCount = 4
And if you ever need to stop all operations that have yet to be started, call cancelAllOperations()
on your queue, like this:
queue.cancelAllOperations()
That won’t cancel any operations that are currently in flight.
SAVE 50% To celebrate WWDC23, all our books and bundles are half price, so you can take your Swift knowledge further without spending big! Get the Swift Power Pack to build your iOS career faster, get the Swift Platform Pack to builds apps for macOS, watchOS, and beyond, or get the Swift Plus Pack to learn advanced design patterns, testing skills, and more.
Available from iOS 4.0
This is part of the Swift Knowledge Base, a free, searchable collection of solutions for common iOS questions.
Link copied to your pasteboard.