gpt4 book ai didi

objective-c - 如何在 c++ lambda 调用中正确捕获 Obj-C block ?

转载 作者:行者123 更新时间:2023-12-04 15:40:44 24 4
gpt4 key购买 nike

我们最近将 Obj-c 应用程序移植到 C++ 跨平台。我们正在将它重新集成到 iOS 中,并且必须将一个块和 NSObject 捕获到一个 lambda 中,这让我非常紧张,因为我不知道它是否会正确保留内存。这是一些测试代码

NSString* important_string = @"Test String";
void (^important_os_callback)(parameterTypes parameter);

my_cpp_function_with_lamdba([important_string, important_os_callback]()
{
// Are the block and string still retained later?
important_os_callback(important_string);
});

最佳答案

是的,它会正常工作。 C++ lambda 等效于创建一个未命名的结构类型,并将捕获的变量作为字段。 ARC 确保当 C++ 结构的字段具有 Objective-C 对象指针类型(或块指针类型)时,它将遵循 ARC 语义,即结构的构造函数会将字段初始化为 nil ;当有人分配给该字段时,它会释放先前的值并保留(或复制,如果它是一个块)新值;并且结构的析构函数将释放该字段。

关于objective-c - 如何在 c++ lambda 调用中正确捕获 Obj-C block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57925717/

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