こんにちは!Storyboardでお天気アプリを作ってみたiOS開発初心者です。
その中で「UIの更新はMainスレッドで!」という大事なルールを学びました。
でも、そもそも「スレッド」って何?「マルチスレッド」ってどういう意味?と思った方も多いはず。
今回は、iOSアプリ開発におけるマルチスレッド処理の基礎を、わかりやすく紹介します!
スレッドってなに?
スレッド(Thread)とは、アプリの中で何かの処理を実行する流れ(作業ライン)のことです。
iOSでは、主に2種類のスレッドを使い分けます:
- Mainスレッド:UIの表示・ユーザーの操作を担当(タップ・スクロールなど)
- Backgroundスレッド:重たい処理(通信、画像処理など)を担当
🌀 マルチスレッド処理ってなに?
マルチスレッド処理とは、複数のスレッドを同時に使ってアプリを効率よく動かすことです。
メリット
- UIが固まらない(=サクサク動く)
- ユーザー体験が向上する
- 時間のかかる処理を分離できる
スレッドをお店で例えると?
- Mainスレッド:レジ係(ユーザーの応対=UI)
- Backgroundスレッド:倉庫係(裏で商品を探す=重たい処理)
レジ係が商品を探しに行ってしまうと、お客さんは待たされますよね。
それと同じで、UIを担当するMainスレッドには重たい処理をさせないのが基本です。
Swiftでマルチスレッド処理を使う方法
Swiftでは、DispatchQueue を使ってマルチスレッド処理が簡単に書けます。
例:バックグラウンドで重たい処理 → メインスレッドでUI更新
DispatchQueue.global().async {
// 重たい処理(例:計算、通信など)
let result = heavyCalculation()
DispatchQueue.main.async {
// UIの更新(Mainスレッドで)
self.resultLabel.text = "\(result)"
}
}
お天気アプリでの具体例
APIで天気情報を取得して、画面に表示する流れのコードです。
func fetchWeather() {
let url = URL(string: "https://example.com/weather")!
URLSession.shared.dataTask(with: url) { data, response, error in
// 通信処理はバックグラウンドで実行される
DispatchQueue.main.async {
// UI更新はMainスレッドで!
self.weatherLabel.text = "今日の天気:晴れ"
self.weatherImageView.image = UIImage(named: "sunny")
}
}.resume()
}
ポイントは、通信処理の後に必ず DispatchQueue.main.async を使うことです。
❗ 注意ポイントまとめ
- Mainスレッドで重たい処理を行うと、アプリが固まる
- BackgroundスレッドでUIを変更すると、クラッシュすることがある
-
DispatchQueue.main.asyncを使ってUIを更新しよう
📝 まとめ
- マルチスレッドとは「複数の処理ライン」で効率よくアプリを動かす仕組み
- UIはMainスレッド、重たい処理はBackgroundスレッドで!
- Swiftの
DispatchQueueを使えば、簡単にスレッドを切り替えられる