gpt4 book ai didi

ios - 从返回 CGImageRef 的 C 函数将 UnsafeRawPointer 转换为 CGImage 会使 Swift 4 崩溃

转载 作者:搜寻专家 更新时间:2023-11-01 06:27:11 25 4
gpt4 key购买 nike

我们有一个跨平台图像处理库,有一个调用将 CGImageRef 作为 UnsafeRawPointer 返回,我需要将其转换为 CGImage。我知道调用在 objective-c 中使用它时的工作方式我可以在返回的数据上使用 (CGImageRef) returnedData 进行转换,然后我得到图像。但是,当尝试使用 Swift 4 在我们的 iOS 应用程序中使用它时,我似乎无法在不出现 EXC_BREAKPOINT 错误或 BAD_ACCESS 错误的情况下进行转换。我试过使用 as! CGImage 以及尝试 pointer.load(as: CGImage.self) 都给我相同的结果。难道我做错了什么?有没有更好的方法将图像从 C 代码传回 swift?我应该提到的是,同一个 C 函数将 CGImageRef 作为参数并传入 CGImage 不会导致任何问题。

最佳答案

我认为这是一个内存管理问题。例如。你得到的 CGImageRef 在你使用它之前被释放。使用“产品”>“方案”>“编辑方案”菜单,选择“运行”部分,“诊断”选项卡并启用“僵尸对象”选项。然后运行应用程序。如果在释放后使用了某些对象,您将得到一个控制台中的消息。

如果是这样的话,像这样的事情应该可以解决问题:

// pointer is your UnsafeRawPointer for CGImageRef
let cgImage = Unmanaged<CGImage>.fromOpaque(pointer).takeRetainedValue()

更好的是,如果您可以编辑或覆盖相关库的头文件,您可以注释 C 函数,让 Swift 知道如何正确处理指针。

关于ios - 从返回 CGImageRef 的 C 函数将 UnsafeRawPointer 转换为 CGImage 会使 Swift 4 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52785165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com