ブログBlog
NSOperationQueue
投稿日:2014年06月26日
インプリメンター長岡、第十九回です。
今回は、また「グリスPDFView」作成時のお話をします。
PDFの描画はある程度時間がかかる処理なのでメインスレッドで行うと操作性が悪くなります。
別スレッドで描画を行い、完了後、画面へ反映するように作ります。
サムネイルなどの一覧表示を扱うようなアプリケーションソフトにとって、
操作性を良くするために、マルチスレッドプログラミングは切っても切れないものです。
今回の初め、別スレッドのコーディングにシンプルに書けることから「dispatch_async」を使っていました。
しかし、機能を改良していくうちに、スレッドの処理を途中で停止させたい場合が出てきました。
「dispatch_async」は途中でキャンセルすることができません。
代わりに「NSOperationQueue」を使うことによってキャンセルすることができました。
使用を検討したときに「NSOperation」の派生クラスを作ったり、面倒そうだなと思っていたのですが、
「NSBlockOperation」を使う事により、「dispatch_async」を使った場合と、
それほど変わらずシンプルに書くことができました。