我正在将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];
}
};
我的问题是,通过C ++构造函数传递self
是否会创建一个强大的ARC引用,这样我的ObjC类就会自行保留?
使用__bridge void*
并将ObjC类存储为void*
可以缓解这个问题吗? C ++类的生命周期与父ObjC类相关联。
谢谢!
答案 0 :(得分:2)
是的,您的自我保留在CppHelper构造函数中。
我不喜欢ARC,因为它可以让简单的指针变得强大。
您可以定义__weak MYClass * _parent;
以避免保留周期。
为什么不使用objective-C的抽象接口:@protocol
`s?