我有两个 djinni 接口,一个用 Swift/objective C/javaSwiftObj
实现,一个用 C++ 实现CPPObj
。
SwiftObj = interface +o +j {
someSwiftMethod();
}
CPPObj = interface +c {
static create(swiftObj: SwiftObj): CPPObj;
someCPPMethod();
}
它们都有一个指向对方的指针,因此SwiftObj
将能够调用someCPPMethod()
,CPPObj
反之亦然:CPPObj
将能够从someSwiftMethod()
调用SwiftObj
:
迅速:
- 类变量:
var myCPPObj: SwiftObj!
- 创作:
myCPPObj = MyCPPObj.create(self)
- 用法:
myCPPObj.someCPPMethod()
在 C++ 中:
- 类变量:
shared_ptr<SwiftObj> mySwiftObj_;
- 用法:
mySwiftObj_->someSwiftMethod();
所以这里的问题是,由于循环引用,这些对象没有被垃圾收集(我尝试并删除了循环引用,他们得到了 GCed)。
但后来我尝试将其中一个指针设置为弱。在 C++ 中:weak_ptr<SwiftObj> mySwiftObj_;
......但这使得mySwiftObj_
它立即被 GC,即使它实际上仍然存在于 swift 中。当我将 swift 指针设置为弱而 C++ 设置为强时,同样的事情发生了。
那么我该如何处理这种情况呢?(除了手动将这些指针之一设置为空)。关于指针如何在 djinni 中实际工作的任何见解?
谢谢!