FLINTERS Engineer's Blog

FLINTERSのエンジニアによる技術ブログ

objective-c 非同期処理

こんにちは。むらいです

scrollviewやtableviewでは画像を表示させることが多いので、そのときのサンプルコードを。


非同期処理をしないと画像を読み込み完了し終えるまで、他の処理が止まってしまい固まります。

これはユーザにとって非常にストレスなので、だいたいのアプリは画像を非同期で取得しているかと思います。

昔はすごく非同期処理が難しかった覚えがありますが、

いつからかものすごく簡単になっています。

コードは以下です。

dispatch_queue_t q_global = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_queue_t q_main = dispatch_get_main_queue();
dispatch_async(q_global, ^{
  //URLなどから取得した画像をuiimageにセット
  dispatch_async(q_main, ^{
    //uiimageのサイズ調整を行い、addsubviewなどを行って表示させる
  });
});

これだけです。

これはgrand central dispatch(GCD)と呼ばれるもので、

Appleが提供している並列処理のAPIです。

もちろん並列処理を行うためのものなので、画像読み込み以外で非同期処理を行いたいときにも使えます。

参考にどうぞ。