StateObject の init(wrappedValue:) がクロージャを受け取るのに対して State の init(wrappedValue:) は値を受け取るから,2 回目以降の (画面が開かれているうちは最初のだけがずっと使いまわされるので) 捨てられる運命にある ChildViewModel の init() と deinit が無駄に発火してしまっているところです.クロージャだとまだ init が実行されていないのでStateObject でも捨てられるのは一緒なんですがより遅延評価的な感じになっているという感じですね.