stateとは、アプリのローカルメモリ
アプリを終了すると消える仕組み、アプリごとにローカルメモリを持つ
iOSアプリは1つの プロセス として動作する
OSは各プロセスに 独立した仮想アドレス空間 を割り当てる
アプリA (プロセスA) → 仮想メモリ 0x0000_0000〜0xFFFF_FFFF
アプリB (プロセスB) → 仮想メモリ 0x0000_0000〜0xFFFF_FFFF
iOSはメモリ管理に 制約が強い
バックグラウンドアプリは一定時間で メモリを解放される
メモリ不足になるとアプリが強制終了されることもある
iOSも Linux と同じく プロセスの中にスレッドがある 仕組みになっています。正確には、iOS は Darwin(macOS/iOSのカーネル)上で動く Unix 系 OS なので、プロセスとスレッドの概念は Linux とほぼ同じ
DispatchQueue.global(qos: .background).async { // 重い処理 let result = doHeavyTask() // UI更新はメインスレッドで DispatchQueue.main.async { self.aiReply = result } }
Task { let result = await fetchDataFromServer() // メインスレッドでUI更新 await MainActor.run { self.aiReply = result } }
let queue = OperationQueue() queue.addOperation { let result = doHeavyTask() OperationQueue.main.addOperation { self.aiReply = result } }
### 実際にstateを実装してみる
CounterPage.swift
import SwiftUI struct CounterPage: View { @State private var count = 0 var body: some View { VStack(spacing: 20) { Text("カウンター") .font(.title) Text("現在の値: \(count)") .font(.headline) Button("+1") { count += 1 } .padding() .background(Color.blue) .foregroundColor(.white) .cornerRadius(8) Button("リセット") { count = 0 } .padding() .background(Color.red) .foregroundColor(.white) .cornerRadius(8) Spacer() } .padding() } }
ユーザー操作やイベントによって変わる値を保持することが多い
なるほど〜