2014-03-25 14 views
0

我正在将C++库集成到iOS应用程序(Objective C)中,该应用程序使用抽象类来实现事件处理程序模式。潜在的ARC保留循环与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]; 
    } 
}; 

我的问题是,是否通过C传递self ++构造函数创建一个强大的电弧参考,这样我的ObjC类将被抓着他们自己?

会使用__bridge void*并将ObjC类别存储为void*缓解此问题吗? C++类的生命周期意味着绑定到父类ObjC类。

谢谢!

回答

2

是的,你的自我保留在CppHelper构造函数中。 我不爱ARC用于制作简单的指针。 您可以定义__weak MYClass * _parent;以避免保留周期。

另外为什么不使用objective-C的抽象接口:@protocol

+0

通常我会使用@protocol,但库已经存在,我必须与它接口 – yano