Memory leaks avec le type Color utilisé dans une classe / struct

Bonjour,

J’ai un problème de fuites mémoires avec des propriétés de type Type Color, que ce soit dans une classe ou dans une structure.

Mon projet principal est beaucoup plus complet que le projet de test ci-dessous et j’ai cette structure Param qui me permet de mettre des paramètres tels que la couleur du texte, des couleurs de fond, des booléens, des float, etc que je dois pouvoir utiliser dans la vue principale, mais modifier dans de multiples sous vues.

Comme il y avait des fuites avec la structure j’ai essayé de la remplacer par une classe, mais les fuites mémoires sont toujours présentes.

Et j’ai aussi essayé avec l’ancienne manière en utilisant ObservableObject, et @ObservedObject, il y a aussi des fuites mémoire.

J’ai refais un petit projet très simple pour essayer de comprendre d’ou viennent les fuites mémoires mais je n’arrive pas à régler le problème.

Est ce que j’ai fait des erreurs ou est c’est un bug côté Apple ?

J’ai vu les fuites avec instrument utilisé sur la mémoire.

Au premier changement il ne passe pas forcément grand chose, mais si on essaye une seconde fois il y a des fuites mémoires, et chaque essai supplémentaire en rajoute de nouvelles.

Ma classe

import SwiftUI

@Observable
class ParamClasse{
    
    var couleurTexte:Color = .green
    
    init(couleurTexte: Color) {
        self.couleurTexte = couleurTexte
    }
}

Ma vue principale

import SwiftUI

struct MainView: View {
    
    var paramClass:ParamClasse = ParamClasse(couleurTexte: .blue)
    
    var body: some View {
        VStack {
            Image(systemName: "globe")
                .imageScale(.large)
                .foregroundStyle(.tint)
            Text("Hello, world!")
                .foregroundStyle(paramClass.couleurTexte)
            
            ModifierCouleurClassView(paramClasse: paramClass)
      
        }
        .padding()
    }
}

#Preview {
    MainView()
}

Ma sous vue qui permet de modifier la couleur

import SwiftUI

struct ModifierCouleurClassView: View {
    
    @Bindable var paramClasse:ParamClasse
    
    var body: some View {
        ColorPicker("Modifier couleur texte", selection: $paramClasse.couleurTexte)
    }
}

#Preview {
    ModifierCouleurClassView(paramClasse: ParamClasse(couleurTexte: .red))
}

Un print screen des memory leak

Est ce que d’autres peuvent tester le code très simple ci-dessous pour voir si vous avez aussi des memory leak ?

Il faut profiler avec instrument et changer au moins 2 fois la couleur.

J’ai xcode 15.4, et sonoma 14.5

Il provoque aussi des memory leak dès qu’on change plus de 2 fois la couleur.
Pourtant il n’y a rien de spécial et on devrait pouvoir décomposer en sous vues pour avoir un code plus propre.

Fichier un

import SwiftUI

struct MainViewSimple: View {
    
    @State var couleurTexte:Color = .blue
    
    var body: some View {
        Text("Hello, World!")
            .foregroundStyle(couleurTexte)
        SelectColor(couleurTexte: $couleurTexte)
    }
}

#Preview {
    MainViewSimple()
}

Fichier deux

import SwiftUI

struct SelectColor: View {
    
    @Binding var couleurTexte:Color
    
    var body: some View {
        ColorPicker("couleur du texte", selection: $couleurTexte)
    }
}

#Preview {
    SelectColor(couleurTexte: .constant(.blue))
}```

Bon apparement même avec le truc le plus simple ça fait des memory leaks

import SwiftUI

struct ContentView: View {
    @State var couleurTexte:Color = .blue
    
    var body: some View {
        Text("Hello, World!")
            .foregroundStyle(couleurTexte)
        ColorPicker("couleur du texte", selection: $couleurTexte)
    }
}

#Preview {
    ContentView()
}