我在Swift中有这个简单的代码:
override var bounds : CGRect {
didSet {
if (bounds != oldValue) {
var path = CGPathCreateMutable()
CGPathAddEllipseInRect(path, nil, bounds)
self.path = path
CGPathRelease(path)
}
}
}
当图层bounds
发生变化时,它应该绘制一个填充图层的圆圈。
这是从我原来的Objective-C代码移植而来的,效果很好:
- (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);
}
然而,Swift代码崩溃了一些段错误。如果我不放弃这条路,那很好。如果我没有设置self.path = path
,那也很好(虽然没有任何东西会显示出来)。如果两者都存在,它将崩溃。
我确实认为CGPathCreateMutable()
创建的路径需要释放..而ObjC似乎就是这种情况。有谁知道为什么它在Swift中不起作用?或者我做错了什么?
谢谢!
答案 0 :(得分:9)
您不需要在Swift中释放CF对象。在您的情况下,CGPathCreateMutable()
返回一个CGPath
对象(不是CGPathRef
),并且内存管理与任何swift对象相同。他们在WWDC视频 Swift Interoperability In Depth