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

问题描述 投票:1回答:1

我们最近将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);
});
objective-c c++11 lambda objective-c-blocks objective-c++
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.