Интегрирам 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.
Благодаря!