- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我们需要将下面的代码从 Objective-C 转换为 Swift。
问题:
有一些函数调用可以释放对象,例如,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, width, height, 8, bytesPerRow, colorSpace, 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 : okay to omit release calls?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36321839/
在 Perl 中,当您有嵌套的数据结构时,允许省略对 2d 和更多嵌套级别的取消引用箭头。换句话说,以下两种语法是相同的: my $hash_ref = { 1 => [ 11, 12, 13 ],
我正在尝试用 _.omit 替换 for 循环,但似乎无法让它正常工作。 这是我的(工作)for 循环: for (var propt in params.filter()) { if (
在Linux系统中使用cp命令对文件夹或者目录进行复制操作时,有时候会出现cp:omitting directiory的错误提示。这是怎么回事呢,下面简单来解释一下,并给出解决方法。 问题图:
Linux系统中复制目录到另一个目录下面,用cp命令时会出现报错 1、在/home/目录下,创建一个新目录,例如:123 2、拷贝目录123 到/tmp/目录中,使用cp命令 3、系统
这个问题在这里已经有了答案: Omitting a shared property from a union type of objects results in error when using
这个问题在这里已经有了答案: Omitting a shared property from a union type of objects results in error when using
我正在使用以下 Lodash 链接实用程序来映射/扁平化和排列并生成一个新的,同时排除未定义的值。 const array = _(resp.data) .omit(_.isUndefined)
我有一个 String ,我需要从中省略一个特定的词。 如下所示,字符串中可能包含单词“Baci”或“BACI” 我已经编写了一个示例程序,如下所示,它运行良好,但我想知道是否有更好的方法来做到这一点
考虑以下代码: interface Params { prop1 : number; prop2 : string; } function f(f2 : (t : T) => void, pa
在下面的类型定义中,我两次使用 Omit 从 B 定义中删除两个属性。我想知道是否可以只使用一个 Omit 但一次性删除两个或更多属性。 export type A = Readonly; expor
有没有办法在嵌套对象属性上使用_.omit? 我希望这发生: schema = { firstName: { type: String }, secret: { type:
我有一个包含进出日期和时间的数据集。每行都是一个进出集,但有些是空白的。我可以使用 na.omit 删除空白并很好地读入(它是一个 csv,并且 na.strings=c("") 适用于 read.c
在ES6中,是否可以创建局部变量并直接引用它们,而不是在前面添加 this.,例如this.name. 例如,在下面的代码中,我该怎么做才能始终编写 {name} 而不是 {this.name} 。
省略字段长度的唯一解决方案是放置/更改文档的映射并重新索引不需要的整个数据。 有没有一种方法可以在查询时忽略字段的长度? 最佳答案 如果长度过滤器是由分析器中的Length Token Filter执
我有一段代码正在做类似的事情 d 0) { do something... } 这似乎是错误的,因为将 na.omit 应用于空数据框会向其添加一行: data.frame() data fram
stargazer 的 5.2 版中似乎存在一个错误包,其中omit.label根据包含模型的顺序,功能无法始终如一地工作: library(stargazer) library(ggplot2) a
尝试使用 Underscore.js 并遇到 _.omit 的一些问题。任何让它工作的帮助将不胜感激。 我有一个嵌套的 JSON 数组,我想在显示数据之前删除“envelopeId”。以下是我目前所拥
如果我不使用 pthread_attr_setschedpolicy 设置线程属性对象的调度策略属性,会发生什么情况?如果我直接继续并从主循环中创建和取消线程怎么办?在什么情况下系统需要在从应用程序创
我被一个基本错误困住了,却不明白为什么: find . -type f -exec cp del {} \; 我们在“test”目录中,我在其中创建了一个“del”子目录。 “test”目录包含各种不
我有一个 HDFStore,我每晚都会在其中输入数据。我想知道系统是否崩溃等,我可能会重新运行进程,所以我想确保如果一行已经存在,那么下次运行进程时 pandas 不会包含它。有没有办法查找重复项而不
我是一名优秀的程序员,十分优秀!