Я интегрирую библиотеку 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.
Спасибо!
Да, ваша личность сохраняется в конструкторе CppHelper.
Я не люблю ARC для того, чтобы делать простые указатели сильными.
Вы можете определить __weak MYClass * _parent;
чтобы избежать сохранения цикла.
Также почему бы не использовать абстрактные интерфейсы target-C: @protocol
`S?
Других решений пока нет …