iOS
Swift

Operationによる非同期処理の用例

概要

OperationにはConcurrentとNon-Concurrentの2タイプがありますが、本記事ではNon-Concurrentの使用例を簡単に紹介します。Concurrentの処理については別記事を参考にしてください。

背景

iOSアプリの開発において、メインスレッドでのUIの操作と並行して、バックグラウンドで何らかの処理を実行したい時があります。たとえばサーバから何らかのデータをダウンロードする処理であったり、あるいは端末側に溜め込んだデータをサーバ側に送信する場合などです。そのような場合、Operationクラスを用いて非同期に処理を行うことが可能です。

Operationクラスの実装

まずはOperationを継承したクラスを作成し、mainメソッドをoverrideします。下記の例では、dataを用いて何らかの処理を行うSomeOperationクラスを実装しています。

dataを用いて何らかの処理を行うSomeOperationクラス
class SomeOperation: Operation {
    var data: Any

    init(data: Any) {
        self.data = data
    }

    override func main() {
        doSomething(data: self.data)
    }
}

OperationQueueにOperationを追加

次に、下記のようにOperationQueueにOperationを追加していきます。これだけでSomeOperationクラスのmainメソッドの処理が順次走ることになります。

let operationQueue = OperationQueue.main

for data in dataList {
    operationQueue.addOperation(SomeOperation(data: data))
}

参考