2016-03-31 11 views
1

ich den folgenden Code in Swift haben:Wie kann ich einen CGDataProvider in Swift unter iOS freigeben?

func cropToAlpha(image:CGImage) -> CGImage? { 
    let pixelDataProvider:CGDataProvider? = CGImageGetDataProvider(image) 
    if pixelDataProvider != nil { 
     let pixelData:CFData? = CGDataProviderCopyData(pixelDataProvider!) 

Die documentation for CGImageGetDataProvider und die documentation for CGDataProviderCopyData beide sagen

Sie sind verantwortlich für die Freigabe dieses Objekt

Der Swift Programmführer spricht über deinitialization aber das ist nicht dasselbe wie ein Objekt freizugeben.

Einige Objective-C Antworten (zB How do I release a CGImageRef in iOS) vorschlagen CFRelease aufrufen, aber wenn ich so etwas wie

CFRelease(pixelDataProvider) 

versuchen dann erhalte ich die Compiler-Fehler

'CFRelease' ist nicht verfügbar: Objekte Core Foundation werden automatisch gemanaged

Wie befolge ich die Anfrage in der Dokumentation für CGIm ageGetDataProvider und CGDataProviderCopyData durch Freigabe der resultierenden Objekte in Swift?

(N. B. Sie suchen nach einem ‚Swift Release‘ ist schwierig, da die Suchergebnisse mit Seiten über Freisetzungen von Swift überschwemmt sind)

Antwort

5

Sie haben noch, es zu veröffentlichen. Die Dokumentation ist immer noch auf Objective-C ausgerichtet. Die Compiler-Fehlermeldung ist korrekt.

Von Using Swift with Cocoa and Objective-C:

Core Foundation Objekte aus kommentierten APIs zurückgegeben werden automatisch Speicher verwaltet in Swift-Sie brauchen nicht auf die CFRetain, CFRelease oder CFAutorelease Funktionen selbst aufzurufen.

Verwandte Themen