цель c — потенциальный цикл сохранения ARC с помощью вспомогательных классов C ++?

Я интегрирую библиотеку 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.

Спасибо!

0

Решение

Да, ваша личность сохраняется в конструкторе CppHelper.
Я не люблю ARC для того, чтобы делать простые указатели сильными.
Вы можете определить __weak MYClass * _parent; чтобы избежать сохранения цикла.

Также почему бы не использовать абстрактные интерфейсы target-C: @protocol `S?

2

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

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