I have a LazyVGrid that displays some data fetched from a remote API. When hiding the LazyVGrid via a button press, I encounter a memory leak. This seems to happen only if there is more content than can be displayed inside of LazyVGrid.
I have prepared some code for you to reproduce this leak. Is there something flaut with this code, or ist that a bug with the LazyVGrid? Maybe theres a workaround?
import SwiftUI
import Foundation
import Combine
enum FakeAPI {
		static var fakeData: [Result] {
			 return [
						Result(id: 1), Result(id: 2), Result(id: 3), Result(id: 4), Result(id: 5),
						Result(id: 6), Result(id: 7), Result(id: 8), Result(id: 9), Result(id: 10),
						Result(id: 11), Result(id: 12), Result(id: 13), Result(id: 14), Result(id: 15),
						Result(id: 16), Result(id: 17), Result(id: 18), Result(id: 19), Result(id: 20),
						Result(id: 21), Result(id: 22), Result(id: 23), Result(id: 24), Result(id: 25),
						Result(id: 26), Result(id: 27), Result(id: 28), Result(id: 29), Result(id: 30)
			 ]
		}
		static func fetchData() -> AnyPublisher<[Result], Error> {
				return Just(fakeData)
						.mapError({ $0 as Error })
						.eraseToAnyPublisher()
		}
}
struct Result: Identifiable {
		let id: Int
}
struct ContentView: View {
		@StateObject private var vm: ViewModel = ViewModel()
		let columns = [
				GridItem(.adaptive(minimum: 200), alignment: .top),
				GridItem(.adaptive(minimum: 200), alignment: .top)
		]
		var body: some View {
				NavigationView {
						ScrollView {
								Button {
										vm.hide = true
								} label: {
										Text("Hide")
								}
								if !vm.hide {
										LazyVGrid(columns: columns) {
												ForEach(vm.results) { result in
														Text("\(result.id)")
																.frame(width: 120, height: 120)
																.background(Color.red)
												}
										}
								}
						}
						.navigationTitle("Grid Memory Leak")
						.onAppear {
								vm.load()
						}
				}
		}
}
final class ViewModel: ObservableObject {
		@Published private(set) var results: [Result] = []
		@Published var hide = false
		private var subscriptions = Set<AnyCancellable>()
		func load() -> Void {
				FakeAPI.fetchData()
						.sink(receiveCompletion: { _ in }, receiveValue: { [weak self] results in
								self?.results = results
						})
						.store(in: &subscriptions)
		}
}