题:
有一些函数调用来释放对象,例如CGImageRelease(newImage).是否可以安全地假设Swift版本不需要模拟,因为所有内存管理都是自动的,或者你是否需要在Swift中释放内存?
Objective-C代码:
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版本:
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}解决方法 根据文档:
Core Foundation types are automatically imported as full-fledged Swift classes. Wherever memory management annotations have been provIDed,Swift automatically manages the memory of Core Foundation objects,including Core Foundation objects that you instantiate yourself
所以你可以省略这些电话.
总结以上是内存溢出为你收集整理的ios – 将Objective-C代码转换为Swift:可以省略释放调用吗?全部内容,希望文章能够帮你解决ios – 将Objective-C代码转换为Swift:可以省略释放调用吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)