gpt4 book ai didi

swift - 从 Swift 创建 Unmanaged

转载 作者:行者123 更新时间:2023-11-30 13:52:29 25 4
gpt4 key购买 nike

自 Swift 2 起,可以从 Swift 调用采用 C 回调的 C 函数,而无需中间包装器。

许多 C 事件处理 API 都遵循首先创建上下文的模式:

struct Context {
CFIndex version;
void *info;
CFAllocatorRetainCallBack retain;
CFAllocatorReleaseCallBack release;
CFAllocatorCopyDescriptionCallBack copyDescription;
}

当注册我们的回调时,上下文会被传递到 C API。当接收到事件时,信息指针会随事件一起传递到回调函数,从而允许我们恢复上下文状态(因为 C 函数不允许捕获状态)。

我想正确创建这样一个上下文,包括retain , releasecopyDescription回调。

对于 copyDescription,签名为

typealias CFAllocatorCopyDescriptionCallBack = 
(UnsafePointer<Void>) -> Unmanaged<CFString>!

如何创建 Unmanaged<CFString>!来自 Swift 的实例,即如何将 Swift 字符串对象从 ARC 内存模型传输到外部管理模型?

最佳答案

查看问题评论。

let string = Unmanaged.passRetained("description")

关于swift - 从 Swift 创建 Unmanaged<CFString>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34093005/

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