使用C ++帮助程序类的潜在ARC保留周期?

时间:2014-03-25 23:39:34

标签: c++ objective-c automatic-ref-counting objective-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];
    }
};

我的问题是,通过C ++构造函数传递self是否会创建一个强大的ARC引用,这样我的ObjC类就会自行保留?

使用__bridge void*并将ObjC类存储为void*可以缓解这个问题吗? C ++类的生命周期与父ObjC类相关联。

谢谢!

1 个答案:

答案 0 :(得分:2)

是的,您的自我保留在CppHelper构造函数中。 我不喜欢ARC,因为它可以让简单的指针变得强大。 您可以定义__weak MYClass * _parent;以避免保留周期。

为什么不使用objective-C的抽象接口:@protocol`s?