iOSでTimerを使って一定間隔ごとにタスクを繰り返し実行する方法
はじめに
iOS開発では、Appleがあらかじめ用意しているTimerクラスを使うことで、一定の時間間隔が経過した後に指定した処理(メッセージ)をターゲットオブジェクトへ送信できます。
Timerクラスの詳細については、Appleの公式ドキュメントを参照してください。
https://developer.apple.com/documentation/foundation/timer
本記事では、Timerクラスを利用して固定時間間隔ごとにタスクを繰り返し実行する方法を解説します。サンプルとして、「5秒ごとにコンソールへhelloと出力するアプリケーション」を作成していきます。
Step 1:プロジェクトの作成
Xcodeを起動し、「New Project」→「Single View Application」を選択して、新しいプロジェクトを作成します。プロジェクト名は「HelloTutorialsPoint」としましょう。
Step 2:doSomething() メソッドの実装
ViewController.swift を開き、viewDidLoad() の下に doSomething() メソッドを追加します。以下のコードをそのままコピー&ペーストしてください。
private func doSomething() {
let timer = Timer.scheduledTimer(timeInterval: 5.0, target: self,
selector: #selector(ViewController.hello), userInfo: nil, repeats: true)
}
ここでは、Timer.scheduledTimer の引数として以下を指定しています。
- timeInterval: 実行間隔(秒)。今回は5.0秒を指定。
- target: 呼び出されるオブジェクト。ここでは自身(self)。
- selector: 間隔ごとに実行されるメソッド。
- repeats: 繰り返し実行するかどうか。
trueで繰り返し有効。
Step 3:hello() セレクターの実装と呼び出し
次に、セレクターとして指定する hello() メソッドを実装し、viewDidLoad() の中から doSomething() を呼び出します。
@objc func hello() {
print("hello")
}
最終的なコード全体
ここまでの実装をまとめると、コードは以下のようになります。
import UIKit
class ViewController: UIViewController, UITextFieldDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
self.doSomething()
}
private func doSomething() {
let timer = Timer.scheduledTimer(timeInterval: 5.0, target: self,
selector: #selector(ViewController.hello), userInfo: nil, repeats: true)
}
@objc func hello() {
print("hello")
}
}
実行結果の確認
これで実装は完了です。アプリケーションをビルドして実行し、コンソールの出力を確認してみましょう。「hello」が5秒間隔で繰り返し出力されていれば成功です。

補足:Timer利用時の注意点
TimerはRun Loop上でスケジュールされるため、scheduledTimerを使う場合は現在のRun Loopに自動的に登録されます。また、Timerはターゲット(self)を強参照で保持するため、ViewController側でタイマーを明示的に無効化(invalidate())しないと解放されない点にも注意が必要です。画面を閉じるタイミングなどで適切にタイマーを停止するようにしましょう。
-
iOS 13にアップデート後のiPhoneアプリ更新方法をわかりやすく解説
iPhoneやiPadをiOS 13にアップグレードした方はすでに多いのではないでしょうか。ダークモードの登場でデバイスの見た目が一新され、パフォーマンスも大幅に向上しました。Appleによると、アプリの起動時間は従来のソフトウェアと比べて最大50%短縮されたとのことです。 iOS 13には数多くのパフォーマンス改善や隠れた新機能が盛り込まれており、操作性がよりスムーズになっています。さて、iOS 13にアップデートした後、新しいApp Storeを確認しましたか?App Storeは全面的にリニューアルされ、「Apple Arcade」などの新要素も追加されています。 しかし、以前あった「
-
iOS 12の「スクリーンタイム」でアプリの使用時間を制限する方法を徹底解説
iOS 12のスクリーンタイムとは?Appleは最新OS「iOS 12」で、デジタルウェルビーイング(デジタル健康)の流れに本格的に参入しました。Googleが「Digital Wellbeing」機能を打ち出したのに続き、AppleもiOS 12に「スクリーンタイム(Screen Time)」と「App制限(App Limits)」機能を導入しています。これらはiOS 12最大の目玉機能と言っても過言ではありません。スクリーンタイムを活用すれば、スマートフォンへの依存を客観的に把握し、コントロールできるようになります。iOS 12を搭載したiPhoneやiPadユーザーは、アプリごとに1日の