【Swift】Timerを使う際オブジェクトを保持した場合は必ず破棄する

うっかりやらかしそうなので、私のための備忘録としてまとめ。
SwiftTimer を使用した際の注意点についてです。

今回参考にさせていただいた記事はこちらから。

【Swift】メモリー対策!使ったタイマーは必ずinvalidate() – Qiita
https://qiita.com/shu26/items/8911d6c2b7a73e6142c1

 

昨日の記事で紹介した Timer の使い方は、オブジェクトを保持しなかったため、破棄する必要はありませんでしたが、場合によってはオブジェクトとして保持して使うこともあるかと思います。
その際は、必ず Timer オブジェクトを破棄する必要があります。
サンプルコードは下記のとおりです。

var timer: Timer?
override func viewDidLoad() {
    super.viewDidLoad()
    timer = Timer.scheduledTimer(timeInterval: 30, target: self, selector: #selector(timerUpdate), userInfo: nil, repeats: false)
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)

    // タイマーを破棄する
    if let workingTimer = timer {
        workingTimer.invalidate()
    }
}

変数 timer に Timer オブジェクトを保持しています。
なので、使い終わったタイミングで、invalidate() を実行して Timer を破棄しなければなりません。
大抵、破棄の処理は viewWillDisappear() で宣言し、ページを離れる直前で実行すればOKだと思います。

 

以上、SwiftTimer を使用する際の注意点でした。
メモリー対策のためにも、Timer を使った後は必ず破棄しましょう。
ご参考になれば幸いです。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG