我在Swift中有以下代码:
func cropToAlpha(image:CGImage) -> CGImage? {
let pixelDataProvider:CGDataProvider? = CGImageGetDataProvider(image)
if pixelDataProvider != nil {
let pixelData:CFData? = CGDataProviderCopyData(pixelDataProvider!)
documentation for CGImageGetDataProvider和documentation for CGDataProviderCopyData都说
您有责任释放此对象
Swift编程指南讨论deinitialization,但这与发布对象不同。
某些Objective-C答案(例如How do I release a CGImageRef in iOS)建议调用CFRelease
,但如果我尝试类似
CFRelease(pixelDataProvider)
然后我得到编译器错误
'CFRelease'不可用:Core Foundation对象自动进行内存管理
如何通过在Swift中释放生成的对象来支持CGImageGetDataProvider和CGDataProviderCopyData文档中的请求?
(N.B。在网上搜索'Swift release'很棘手,因为搜索结果充斥着关于Swift版本的页面)
答案 0 :(得分:6)
您不必释放它。该文档仍然针对Objective-C。编译器错误消息是正确的。
来自Using Swift with Cocoa and Objective-C:
从带注释的API返回的Core Foundation对象在Swift中自动进行内存管理 - 您无需自己调用
CFRetain
,CFRelease
或CFAutorelease
函数。