gpt4 book ai didi

c++ - 如何检索 Objective-C 对象的原始指针值?

转载 作者:太空宇宙 更新时间:2023-11-04 14:02:52 24 4
gpt4 key购买 nike

我想尽量减少项目中的 Obj-C 代码量。

作为这项工作的一部分,有必要抽象多点触控 UITouch 数据,实例化一些 C++ 类,这些类将在我从 C++ 处理数据时管理保存数据,而不是直接通过 Objective-C 处理它。有很多这样做的原因(例如能够使用任意形式的设备输入连接到代码中)。

这是我目前获得的 API。我有一个 InputHandler 类,它有这些公共(public)方法:

// c++
void beginPoint(float x, float y, void* touchUID);
void endPoint(float x, float y, void* touchUID);
void movePoint(float x, float y, void* touchUID);
void cancelPoint(float x, float y, void* touchUID);

对应于 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 等等,在我的 ViewController.mm 中。

我需要分别跟踪各个手指,文档非常清楚地表明每个手指都被分配了自己的 UITouch 实例(即 UITouch 对象实际上代表一个特定的手指)。这表明我可以使用指针值作为手指跟踪点的唯一 ID。

但是,我在这里遇到了麻烦:enter image description here

我现在需要了解桥接转换。老实说,我对 ARC 的工作原理一无所知,因为我几乎不了解保留/释放。我完全投入到 shared_ptr 和来自 C++ 的 friend 来帮助我管理复杂的系统。

我显然需要单独保留UITouch* touch,让它被保留/释放/ARC,就好像我没有访问它一样。但即使对于像这样基本的东西,我也不清楚我需要使用三个桥接转换选项中的哪一个。

最佳答案

如果您同意 UITouch 对象在方法返回后消失,那么您只需要一个简单的 __bridge 转换。您可以将 UITouch 对象的内存地址用作,只要您不取消引用它即可。方法返回后很快就会挂起。

关于c++ - 如何检索 Objective-C 对象的原始指针值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18433528/

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