我有两个djinni接口,一个要在Swift/Objective C/Java中实现SwiftObj
,另一个要在C++中实现CPPObj
。
SwiftObj = interface +o +j {
someSwiftMethod();
}
CPPObj = interface +c {
static create(swiftObj: SwiftObj): CPPObj;
someCPPMethod();
}
他们相互引用,所以
SwiftObj
将能够调用CPPObj
的someCPPMethod()
方法,反之亦然:CPPObj
将能够从SwiftObj
调用someSwiftMethod()
方法:
在 Swift 中:
- 类变量:
var myCPPObj: SwiftObj!
- 创建:
myCPPObj = MyCPPObj.create(self)
- 使用:
myCPPObj.someCPPMethod()
在 C++ 中:
- 类变量:
shared_ptr<SwiftObj> mySwiftObj_;
- 使用:
mySwiftObj_->someSwiftMethod();
所以问题是,由于循环引用,这些对象不会被垃圾回收(我尝试过并删除了循环引用,它们被垃圾回收了)。
但是我尝试将其中一个指针设置为弱引用。在 C++ 中:weak_ptr<SwiftObj> mySwiftObj_;
... 但这使得mySwiftObj_
立即被垃圾回收,即使它实际上仍存在于 Swift 中。当我将 Swift 指针设置为弱引用并将 C++ 设置为强引用时,同样的事情也发生了。
那么我该如何处理这种情况?(除了手动将其中一个指针设置为 null)。对于指针在 djinni 中实际工作方式的任何见解都会有所帮助。
谢谢!