gpt4 book ai didi

c++ - C++ 辅助类的潜在 ARC 保留周期?

转载 作者:行者123 更新时间:2023-11-28 02:52:52 25 4
gpt4 key购买 nike

我正在将 C++ 库集成到 iOS 应用程序 (Objective C),该应用程序使用抽象类来实现事件处理程序模式。

为了接收事件,我需要实现一个 C++ 类。除非我遗漏了什么,否则我一直在实现 C++ 类来实现抽象接口(interface),然后为 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++ 类的生命周期意味着绑定(bind)到父 ObjC 类。

谢谢!

最佳答案

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

另外,为什么不使用 objective-C 的抽象接口(interface):@protocol `s?

关于c++ - C++ 辅助类的潜在 ARC 保留周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22648609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com