1

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

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

这是我到目前为止的 API。我有一个InputHandler具有这些公共方法的类:

// 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。

但是,我在这里遇到了麻烦:在此处输入图像描述

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

我显然需要留下一个UITouch* touch,并让它完全保留/释放/ARC'd,就好像我没有访问它一样。但即使是这样基本的东西,我也不清楚我需要使用三个桥接演员选项中的哪一个。

4

1 回答 1

0

如果您对 UITouch 对象在方法返回后消失感到满意,那么您只需要一个简单的 __bridge 强制转换。只要您不取消引用它,您就可以使用 UITouch 对象的内存地址作为键。方法返回后很快就会悬空。

于 2013-08-25T21:34:06.953 回答