Gerade aktualisiert auf Xcode Beta 4 und bemerkte den folgenden Compilerfehler mit meinem Code unten:
%Vor%'CGPathRelease' ist nicht verfügbar: Core Foundation-Objekte sind automatisch Speicherverwaltung
Also entferne ich einfach nur meine Freigaben und alles sollte in Ordnung sein? Oder gibt es noch etwas, das mir fehlt? Und gibt es spezielle Fälle, die ich mit ARC beachten sollte?
Der Mit Cocoa-Datentypen arbeiten Abschnitt von Swift mit Cocoa und Objective-C verwenden sagt (Betonung meins):
Core Foundation-Objekte, die von annotierten APIs zurückgegeben werden, werden automatisch in Swift verwaltet. Sie müssen nicht die Funktionen
CFRetain
,CFRelease
oderCFAutorelease
selbst aufrufen . Wenn Sie Core Foundation-Objekte von Ihren eigenen C-Funktionen und Objective-C-Methoden zurückgeben, kommentieren Sie sie mit mitCF_RETURNS_RETAINED
oderCF_RETURNS_NOT_RETAINED
....
Wenn Swift importierte APIs importiert, die nicht mit Anmerkungen versehen wurden, kann der Compiler die zurückgelieferten Core Foundation-Objekte nicht automatisch verwalten. Swift umschließt diese zurückgegebenen Core Foundation-Objekte in einer
Unmanaged<T>
-Struktur .
Also, es sei denn, Sie haben ein Unmanaged
struct, das ist korrekt und Sie müssen sich keine Sorgen machen, das Objekt manuell freizugeben.
Wie die akzeptierte Antwort sagt: Ja, Sie brauchen CGPathRelease
überhaupt nicht.
Hinweis: Wenn Sie Unmanaged<T>
in Ihrem Code verwenden, überprüfen Sie die akzeptierte Antwort .
Tags und Links ios memory-management swift automatic-ref-counting core-foundation