你需要在Swift中发布CGContextRef吗?

时间:2015-01-10 04:22:12

标签: swift memory-management cgcontextref

我使用CGBitmapContextCreate创建了一个上下文。我需要使用CGContextRelease释放它吗?我知道在Objective-C中答案是肯定的,但在Swift中怎么样?

谢谢!

2 个答案:

答案 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>!