如何在C++应用程序中处理指向 Objective-C 对象的指针
How to deal with a pointer to an Objective-C object in a C++ app
我有一个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++ 上下文,并在那里调用它。
-
您可以通过将其扩展名更改为.mm来提交Objective-C++这样,您就可以在单个文件中混合C++和 obj-c 代码。
-
如果这种方法不适合您,您可以查看低级 obj-c 对象消息发送。obj-c 中的所有方法调用都转换为低级,如下所示
ID 数据 = ...;
objc_msgSend(数据,sel_getUid("发布"));//[数据发布];
相关文章:
- 创建跨平台 C++ 触摸管理器.在 c++ 中传递 Objective-c 对象涉及代码
- C++对象作为 Objective-C++ 属性
- 如何在从Objective C调用C++回调后释放桥接对象
- 使用 c++ 标准::unique_ptr<> 或 std::shared_ptr<> 管理 objective-C 对象
- 防止从C++代码中调用 Objective-C 对象
- Objective-C++C++对象析构函数
- 如何在C++应用程序中处理指向 Objective-C 对象的指针
- 如何确定 void * 指针在运行时指向 objective-c 对象还是 c++ 对象
- 有没有办法用C++类包装一个 Objective-C 对象
- 在Objective c包装器中传递c++对象
- Cocoa Objective-C:使用c++对象作为NSDictionary键
- Objective-C块和c++对象
- 添加c++对象到Objective C集合(NSSet)的麻烦
- Objective-C:如果我在ARC的函数中返回一个c++对象,它会创建一个副本吗?我是否必须手动释放该副本?
- 我可以添加自己的类型转换操作符,以便能够将c++对象转换为objective C吗?
- 在c++对象中使用ARC和Objective C对象会发生什么?
- 在没有对象的情况下从Objective C调用特定的C++方法
- C++流日志Objective-C对象
- cocoa touch -- 测试对象是否是 objective-C 对象
- Objective C对象作为c++类中的实例变量