
SwiftやSwiftUIでアプリを作っていると、「RunLoop(ランループ)」という言葉を見かけることがあります。
初めて見る人にとっては「なんだか難しそう…」と思うかもしれませんが、実はアプリが「止まらずに動き続ける」ための、とても大切な仕組みです。
この記事では、RunLoopの意味や役割を、できるだけやさしく・専門用語を使わずに解説します。
RunLoopとは?
簡単にいうと、RunLoopは「待機」と「処理」を繰り返す仕組みです。
アプリが起動している間、画面のタッチやボタンの押下、ネットワークからの応答など、色々な「イベント(出来事)」が発生します。
RunLoopはそれらを「じっと待って、何か起きたら処理をする」という流れでアプリを動かし続けているのです。
つまり、RunLoopはアプリの「心臓」や「エンジン」のようなもの。
ずっと動き続けていて、イベントが来るのを待ち受け、必要な処理を行います。
具体的にどんなときに動いているの?
たとえば、以下のような場面でRunLoopは活躍しています。
- ボタンをタップした時 → 処理を呼び出す
- スクロール操作をした時 → 画面をスムーズに動かす
- タイマーが時間になった時 → 処理を実行する
- バックグラウンドでネットワーク通信している時 → 終わったら通知を受け取る
つまり、ユーザーの操作や、システムの通知など、様々なイベントに「気づいて反応する」ための仕組みがRunLoopです。
RunLoopがないとどうなるの?
もしRunLoopがなかったら、アプリは「イベントが来ても気づけない」状態になります。
つまり、画面に何も反応しないアプリになってしまいます。
RunLoopはアプリのメインスレッド(UIを担当する部分)で常に動いていて、イベントが来るのを待っています。
そして、何か起こったときに適切な処理を呼び出してくれます。
SwiftでのRunLoopの登場場面
SwiftやSwiftUIを書いていると、自分でRunLoopを意識する機会はあまり多くありません。
ですが、以下のような場面で関わってきます。
1. Timer.publishで使う時
|
1 2 |
Timer.publish(every: 1, on: .main, in: .common) |
.main(メインRunLoop)や .common(RunLoopのモード)を指定します。
ここでRunLoopの「どこで処理するか」を指示しています。
2. アニメーションやUIの反応
画面のアニメーションやボタンのタップ処理なども、実はすべてRunLoopを通じて処理されています。
RunLoopのモードって?
RunLoopには「モード」というものがあります。
これは今どんな状況でイベントを受け付けるかを切り替えるための設定です。
よく使われるのはこの2つ:
.default:通常の処理に使うモード(アニメーション中などは切り替わることも).common:どんな状況でも共通して使われるようにするためのモード
初心者のうちは「モードがある」とだけ覚えておけばOKです。
詳細はあとから理解していけば十分です。
自分でRunLoopを使うことってある?
ほとんどの場合、RunLoopはiOSやSwiftが内部で自動的に処理してくれます。
自分でRunLoopを直接使うケースは少ないですが、タイマーや非同期処理などで触れる機会はあります。
たとえば:
|
1 2 |
RunLoop.main.run() |
これは「今のスレッドでRunLoopを開始して待機し続ける」という命令です。
簡単なCLIアプリ(コマンドラインアプリ)などで使うことがあります。
よくある疑問:RunLoopは止まることはある?
基本的に、メインRunLoopはアプリが終了するまで止まりません。
何もしないときはじっと「何か起きるのを待って」います。
ずっと回っているから「ループ」という名前なのです。
まとめ
RunLoopとはイベントが起きるのを待って、それに反応する「エンジン」のような仕組みです。
SwiftUIやUIKitの開発では、RunLoopの仕組みを「なんとなく」でも知っておくと、タイマーやイベント処理がどう動いているのかを理解する助けになります。
はじめは難しく見えるかもしれませんが、「アプリが止まらずに動き続けるための仕組み」としてざっくり把握しておきましょう!
