Ich habe in Swift ein Speicherleck gefunden. Es gab mir Alpträume, weil mein Code überall voller kleiner Lecks war, und dann konnte ich es auf dieses kleine Beispiel reduzieren,
%Vor% Wenn Sie dieses Programm auf einem iPhone und einem Profil mit Instrumenten ausführen, finden Sie dieses Leck in Array._copyToNewBuffer
,
Wenn ich den Aufruf von mysub.append
lösche, hört es auf zu lecken. Wenn ich die Aufzählung von Primitive
entferne, hört sie auch auf zu lecken. Alle Klassen, in denen ich ein Enum lecke, sind so. Was passiert mit Swift enums?
Reproduziert in Swift 3, Xcode 8.2.1 und iOS 10.2, sowohl auf einem iPhone 6 als auch auf einem iPad Pro. Kann nicht im Simulator oder in einem Gerät mit iOS 9.3.2 reproduziert werden. Sie können eine minimale Beispiel-App hier herunterladen: Ссылка
Ist das ein bekannter Fehler? Gibt es irgendwelche Arbeiten?
Bearbeiten:
Da dies mich an einen anderen Enum-Fehler erinnert, gibt Accessor in Swift 1.2 / 2.0 Release-Build nur den falschen Wert an , Ich habe versucht, das Enum zu einem @objc Int
enum zu machen, aber es leckt immer noch. Wenn Sie jedoch lightingType
direkt auf Int
setzen, wird das Leck behoben ...
Bearbeiten2: Nachdem ich mein iPhone auf 10.3 und Xcode auf 8.3 aktualisiert habe, ist das Leck verschwunden. Es scheint, dass es ein Problem von iOS 10.2 war ...
Hey @endavid hat es geschafft, das Problem konsistent zu replizieren. Wir verbringen eine gute Zeit damit, herauszufinden, was los ist und deine Post hat sehr geholfen!
Hier ist das Beispiel Repo: Ссылка
Radar: Ссылка Wir entwickeln SDKs und das gleiche Problem taucht mit einem kleinen Unterschied auf. Da wir Dinge interoperieren wollten, fügten wir @objc
zur enum-Definition hinzu und Dinge begannen genau so zu lecken, wie Sie beschrieben haben, da Ihre Klasse zwei Eigenschaften hat, eine enum und ein veränderbares Array.
Wenn wir die optionale enum-Klasseneigenschaft in eine nicht optionale konvertieren, verschwindet das Leck.
%Vor%Tags und Links memory-leaks ios enums swift