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