まだAppleのサンプルプログラム「AVCam」を見ています。
エラー回避のための安全策が大半を占めますが、
その次くらいに多いのがLivePhotoというキーワードです。
私の実機はiPhone6なので、LivePhotoが何なのかしばらくわかりませんでした。
6s以降の静止画撮影はLivePhotoモードがデフォルト設定なんですね![]()
どちみち、うちには動作環境がなく、確認のしようもないので、
LivePhoto関連は削ってみようと思います。
そうすると静止画撮影に関しては、
AVCapturePhotoCaptureDelegateの実装ということになり、
書籍のサンプルプログラムと大差ない規模に近づきます。
残りは動画モードで、これがちょっと難解です![]()
マルチスレッドを使っているのは、ユーザーの操作感の向上のためで、
状態の取得や設定の変更が完了するまでの間、
画面が止まったり真っ暗になったりしないようにする、
「待たされている」という印象をユーザーに与えないようにする、
という工夫だと思われます。
なのでこのテクニックも、無くてはならないわけではないようです。
(実際、プロセッサが非力なデジタルカメラでは結構モタつきますしね
)
ただ、コードを眺めているとパターンが何となく見えてきます。
ビューやコントロール部品はメインスレッドからアクセスして、
入力にしろ出力にしろ、何かしらのデバイスを相手にする時は
別スレッドのシリアルキューに投げ込まれています。
カメラアプリは、カメラユニットから入力して、ストレージに出力しますから、
ほぼすべての処理が別スレッドになっています。
それでコードが複雑に見えるのでしょう![]()