簡體   English   中英

如何在 c++ lambda 調用中正確捕獲 Obj-C 塊?

[英]How can I properly capture an Obj-C block within a c++ lambda call?

我們最近將 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++ struct 的字段具有 Objective-C 對象指針類型(或塊指針類型)時,它將遵循 ARC 語義,即結構的構造函數將字段初始化為nil 當有人分配給該字段時,它會釋放先前的值並保留(或復制,如果它是一個塊)新值; 並且結構的析構函數將釋放該字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM