Как получить значение необработанного указателя объекта Objective-C?

Я хочу минимизировать количество кода 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 фактически представляет определенный палец). Это указывает на то, что я могу избежать использования значения указателя в качестве уникального идентификатора для точки отслеживания пальцев.

Тем не менее, я столкнулся с проблемой здесь: введите описание изображения здесь

Мне нужно узнать о мостовых бросках сейчас. Честно говоря, я ничего не знаю о том, как работает ARC, потому что я пока плохо понимаю, что такое сохранение / освобождение. Я полностью вложен в shared_ptr и друзья из C ++, чтобы помочь мне управлять сложными системами.

Мне явно нужно просто Оставь UITouch* touch в одиночестве, и пусть это будет сохранено / release / ARC’d точно так, как будто я не получил к нему доступ. Но даже для чего-то столь же простого, как это, не ясно, какой из трех вариантов связывания я должен использовать.

1

Решение

Если вы согласны с тем, что объект UITouch исчезает после возвращения метода, все, что вам нужно, — это простое приведение __bridge. Вы можете использовать адрес памяти объекта UITouch как ключ до тех пор, пока ты не разыграешь его. Это будет зависать вскоре после возврата метода.

0

Другие решения

Других решений пока нет …