Swift:无需分配内存初始化UnsafeMutablePointer<CGImage?>
初始化
UnsafeMutablePointer<CGImage?>的最简方案 针对VTCreateCGImageFromCVPixelBuffer这类会自行分配内存的Core Foundation函数,完全不需要手动调用allocate方法,最简方式是利用Swift的inout语法结合临时变量:
- 声明一个
var修饰的CGImage?临时变量(初始值可设为nil) - 用
&符号将该变量传入函数的imageOut参数,Swift会自动生成符合要求的UnsafeMutablePointer<CGImage?>指针
示例代码
var resultCGImage: CGImage? = nil let status = VTCreateCGImageFromCVPixelBuffer(imageBuffer, options: nil, imageOut: &resultCGImage) // 检查执行状态并使用生成的CGImage if status == noErr, let cgImage = resultCGImage { // 在这里处理cgImage }
替代写法(显式创建指针)
如果需要更明确地控制指针生命周期,也可以用withUnsafeMutablePointer函数,不过上面的&写法更简洁:
var resultCGImage: CGImage? let status = withUnsafeMutablePointer(to: &resultCGImage) { ptr in VTCreateCGImageFromCVPixelBuffer(imageBuffer, options: nil, imageOut: ptr) }
注意事项
- 临时变量必须是
var类型,因为函数需要修改其指向的内容 - 生成的
CGImage由Core Foundation内存管理规则处理,在Swift中会自动通过ARC管理,无需手动释放
内容的提问来源于stack exchange,提问作者jnwjack
相关产品推荐
相关产品推荐

