如何在C++应用程序中处理指向 Objective-C 对象的指针

How to deal with a pointer to an Objective-C object in a C++ app

本文关键字:Objective-C 对象 指针 处理 C++ 应用程序      更新时间:2023-10-16

我有一个C++应用程序,它使用用C/C++编写的第三方库。该库包含一个返回指向NSWindow的指针的函数,即来自Cocoa Framework的Objective-C元素。

在我的代码的某个点,我调用了该函数,但在继续之前,我必须在该NSWindow上执行一个非常小的操作(例如更改标志或其他内容)。换句话说,我必须在C++上下文中调用Objective-C对象的Objective-C方法。在您看来,最好/正确的方法是什么?

您可以使用

Objective-C++ 文件 (.mm),在其中您只需使用一个块,就像使用 lambda 一样:

//In an .mm file
auto changeFlag = ^(/* your params */ ) {
    [yourObjCObject yourObjCMethod];
};

然后,可以将该回调作为 std::function 传递给 c++ 上下文,并在那里调用它。

  1. 您可以通过将其扩展名更改为.mm来提交Objective-C++这样,您就可以在单个文件中混合C++和 obj-c 代码。

  2. 如果这种方法不适合您,您可以查看低级 obj-c 对象消息发送。obj-c 中的所有方法调用都转换为低级,如下所示

    ID 数据 = ...;

    objc_msgSend(数据,sel_getUid("发布"));//[数据发布];