Ich habe eine Anwendung, die Texturen Szene Kit folgendes erzeugt:Wie Speicher von SKTexture erstellt freizugeben
let texture = SKTexture(image: image)
Das Problem ist, dass nach mehreren Anrufen, stürzt die Anwendung aufgrund der geringen Speicher.
Ich brauche wirklich nur die zuletzt erstellte Textur, so dass bei der Erstellung einer neuen, der Speicher der Vorschau freigegeben werden kann, aber Scene Kit scheint diese Texturen zu halten, auch wenn sie nicht mehr verwendet werden (Die Knoten sind nicht länger Teil der Szene).
Wie kann ich Scene Kit manuell mitteilen, um den Speicher und Cache der Textur freizugeben, damit ich nicht in die Situation des Absturzes mit wenig Speicher gerät?
Ich weiß auch, dass die SceneKit-Dokumentation empfiehlt, alle Verweise auf die Textur zu entfernen, indem Knoten und dergleichen entfernt werden, aber das sollte geschehen und doch wird die Textur nicht freigegeben. Gibt es eine gute Möglichkeit zu debuggen und zu sehen, was sich an der Referenz hält?
Beim erneuten Überprüfen des Codes erstelle ich eine Szene, in der das Bild in der primären Szene gerendert werden soll (dessen Knoten sich nicht ändert). Grundsätzlich gibt es ein Objekt in der Szene, das ein Bild oder ein Video anzeigen kann und das durch das Zurückgeben einer Szene, die als Material für diffuse Inhalte verwendet wird, ersetzt wird.
let texture = SKTexture(image: image)
let sprite = SKSpriteNode(texture: texture)
let scene = SKScene(size: sprite.size)
sprite.position = CGPointMake(CGRectGetMidX(scene.frame), CGRectGetMidY(scene.frame));
scene.addChild(sprite)
Und dann hier verwendet:
primaryObjectMaterial.diffuse.contents = scene
Ich würde erwarten, wenn das Knotenmaterial Inhalt verändert der Szene, diese Szene (und die Textur und Bild) freigegeben würden, da es nicht mehr wären irgendwelche Hinweise darauf, aber vielleicht hängt das Caching-System an etwas oder ich mache etwas falsch?
http://stackoverflow.com/questions/21025295/how-do-i-ge-rid-of-skisteures –
Ich sehe, wo Sie legen, dass die Knoten nicht mehr ein Teil der Szene sind, aber entfernen Sie tatsächlich die Knoten? –
@Oleksii: Dieser Link empfiehlt nicht Imagenamed zu verwenden, was ich mache. – Gujamin