Я интегрирую библиотеку C ++ в приложение iOS (Objective C), которое использует абстрактные классы для реализации шаблона обработчика событий.
Чтобы получать события, мне нужно реализовать класс C ++. Если мне чего-то не хватает, я реализую классы C ++ для реализации абстрактных интерфейсов, а затем сохраняю экземпляр класса Objective-C, поэтому я могу вызывать на нем селекторы.
Вот пример
@implementation MYClass : NSObject
{
CppHelper * _helper;
}
- (id)init
{
if(self = [super init])
{
_helper = new CppHelper(self);
}
}
- (void)dealloc
{
delete _helper;
}
@end
...
class CppHelper : public AbstractLibraryInterface
{
private:
MYClass * _parent;
public:
CppHelper(MYClass * objCParent)
: _parent(objCParent)
{ }
onEvent()
{
[_parent handleEvent];
}
};
Мой вопрос: передача self
через конструктор C ++ создает сильную ссылку ARC, так что мои классы ObjC будут держаться за себя?
Может ли использование __bridge void*
и сохранение класса ObjC как void*
облегчить эту проблему? Время жизни класса C ++ должно быть привязано к родительскому классу ObjC.
Спасибо!