我使用CGBitmapContextCreate创建了一个上下文。我需要使用CGContextRelease释放它吗?我知道在Objective-C中答案是肯定的,但在Swift中怎么样?
谢谢!
答案 0 :(得分:22)
自动管理CFType,除非明确指定为Unmanaged。
根据文档。
https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/WorkingWithCocoaDataTypes.html
自动注释API返回的Core Foundation对象 在Swift中管理的内存 - 你不需要调用CFRetain, CFRelease或CFAutorelease可以自行运行。如果你退回Core 来自您自己的C函数和Objective-C方法的Foundation对象, 用CF_RETURNS_RETAINED或者注释它们 CF_RETURNS_NOT_RETAINED。编译器自动插入内存 管理调用它编译调用这些API的Swift代码。 如果仅使用未间接返回Core的带注释的API 基础对象,您可以跳过本节的其余部分。除此以外, 继续学习如何使用非托管Core Foundation 对象。
当Swift导入尚未注释的API时,编译器 无法自动内存管理返回的Core Foundation 对象。 Swift将这些返回的Core Foundation对象包装在一个 不受管理的结构。
非托管类型将具有类型签名
func StringByAddingTwoStrings(CFString!, CFString!) -> Unmanaged<CFString>!
CGBitmapContextCreate
具有类型签名
func CGBitmapContextCreate(...) -> CGContext!
因此它由swift自动管理。
答案 1 :(得分:9)
不,您不需要致电CGContextRelease
。事实上,试图给你这个错误:
&#39; CGContextRelease&#39;不可用:Core Foundation对象自动进行内存管理
CGContext
个实例在Swift中自动进行内存管理。你可以从函数签名中看出来:
func CGBitmapContextCreate(/* several parameters */) -> CGContext!
您需要自行释放的返回值如下所示:
func CGBitmapContextCreate(/* several parameters */) -> Unmanaged<CGContext>!