SwiftUI: ビューツリー更新時にツリー全体が再生成されている

p0dee
2 min readMay 28, 2020

--

仕様なのか、既知のバグなのか。

例えば以下のように、ボタンを押すごとにカウントアップする実装があるとする。ボタンを押すたびにカウントが1ずつ加算され、その値を表示しているのはボタン自身のみとする。

この際カウントアップ時に再生成されるのは、期待としてはボタンのみであってほしいのだが、実際には、表示が固定であるラベル(“Simple Label”)も含め、ビューツリー全体が再生成されるという挙動をする。

これが先述の例のように、非常にシンプルな実装であれば問題にならないだろうが、次のようなケースでは注意が必要だと思われる。

ビューの表示や紐づく関数内で

  • 重い処理を行っている
  • 乱数にもとづく表示をしている

このような場合、描画更新毎に処理が再実行されてしまい、結果として動作の重さや、意図しない表示の原因となり得るためだ。

ラベルの表示は変化していないが…
表示時と描画更新時に、毎度実行されている

一方onApeear(_:)であれば、画面表示につき1度しか呼び出されないことが保証されているため、意識的に使用し分ければ良いと思っている。

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

No responses yet

Write a response