Ich habe diesen einfachen Code in Swift:
override var bounds : CGRect {
didSet {
if (bounds != oldValue) {
var path = CGPathCreateMutable()
CGPathAddEllipseInRect(path, nil, bounds)
self.path = path
CGPathRelease(path)
}
}
}
Es soll einen Kreis zeichnen, der die Ebene ausfüllt, wenn sich die bounds
der Ebene ändern.
Das ist aus meinem alten Objective-C Code portiert, der einwandfrei funktioniert:
- (void)setBounds:(CGRect)bounds
{
if (CGRectEqualToRect(self.bounds, bounds)) return;
super.bounds = bounds;
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddEllipseInRect(path, nil, bounds);
self.path = path;
CGPathRelease(path);
}
Der Swift-Code stürzt jedoch ab mit einem Segfault. Wenn ich den Pfad nicht freigebe, ist alles in Ordnung. Wenn ich nicht self.path = path
setze, ist es auch in Ordnung (obwohl anscheinend nichts angezeigt wird). Wenn beide vorhanden sind, stürzt es ab.
Ich denke aber, dass ein Pfad, der mit CGPathCreateMutable()
erstellt wird, freigegeben werden muss.. und das scheint für ObjC der Fall zu sein. Weiß jemand, warum es in Swift nicht funktioniert? Oder habe ich etwas falsch gemacht?
Danke!