iOS   发布时间:2022-03-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 将Objective-C代码转换为Swift:可以省略释放调用吗?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我们需要将以下代码从Objective-C转换为 Swift.

题:

有一些函数调用来释放对象,例如CGImageRelease(newImagE).是否可以安全地假设Swift版本不需要模拟,因为所有内存管理都是自动的,或者你是否需要在Swift中释放内存?

Objective-C代码

@H_696_13@CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(imageSampleBuffer); CVPixelBufferLockBaseAddress(imageBuffer,0); uint8_t *baseAddress = (uint8_t *)CVPixelBufferGetBaseAddress(imageBuffer); size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer); size_t width = CVPixelBufferGetWidth(imageBuffer); size_t height = CVPixelBufferGetHeight(imageBuffer); CVPixelBufferUnlockBaseAddress(imageBuffer,0); CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); CGContextRef newContext = CGBitmapContextCreate(baseAddress,width,height,8,bytesPerRow,colorSpace,kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst); CGImageRef newImage = CGBitmapContextCreateImage(newContext); CGContextRelease(newContext); CGColorSpaceRelease(colorSpacE); UIImage *image= [UIImage imageWithCGImage:newImage scale:1.0 orientation:orientation]; CGImageRelease(newImagE);

到目前为止Swift版本:

@H_696_13@private func turnBufferToPNGImage(imageSampleBuffer: CMSampleBufferRef,scale: CGFloat) -> UIImage { let imageBuffer = CMSampleBufferGetImageBuffer(imageSampleBuffer) // Lock base address CVPixelBufferLockBaseAddress(imageBuffer,0) // Set properties for CGBitmapContext let pixelData = CVPixelBufferGetBaseAddress(imageBuffer) let width = CVPixelBufferGetWidth(imageBuffer) let height = CVPixelBufferGetHeight(imageBuffer) let bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer) let colorSpace = CGColorSpaceCreateDeviceRGB() // Create CGBitmapContext let newContext = CGBitmapContextCreate(pixelData,CGImageAlphaInfo.PremultipliedFirst.rawvalue) // Create image from context let rawImage = CGBitmapContextCreateImage(newContext)! let newImage = UIImage(CGImage: rawImage,scale: scale,orientation: .Up) // Unlock base address CVPixelBufferUnlockBaseAddress(imageBuffer,0) // Return image return newImage }

解决方法

根据文档:

所以你可以省略这些电话.

大佬总结

以上是大佬教程为你收集整理的ios – 将Objective-C代码转换为Swift:可以省略释放调用吗?全部内容,希望文章能够帮你解决ios – 将Objective-C代码转换为Swift:可以省略释放调用吗?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。