提问人:XDS 提问时间:11/10/2023 最后编辑:XDS 更新时间:11/11/2023 访问量:46
我是否应该保留对 NSData 对象的 C# 引用,直到我确定 iOS 中的基础本机调用是否已完成使用它?
Should I keep the C# reference to an NSData object around until I know for sure that an underlying native call in iOS has finished using it or not?
问:
我正在处理 C# 与 iOS 的绑定,我对参数传递的某些方面感到好奇。假设我们有以下一段代码:
public void BeginNativeCallFromCsharpToIOS(byte[] data)
{
var nsData = NSData.FromArray(data);
// non blocking takes 1 minute to complete
_theNativeIosObject.BeginNativeCallToIosHere(nsData);
}
我想知道在此代码示例中,在底层 iOS 操作(异步)设法在 iOS 本机模式下完全完成之前,csData 变量是否会由 C# 垃圾收集器自动处置。
因为如果 nsData 确实在上面收集了垃圾,那么我担心底层的原生 ns-array 对象将有资格损坏(并可能导致整个应用程序崩溃)。
如果是这样的话,我正在考虑重构代码,以便在处理_nsData时更加谨慎:
private NSData _nsData;
public void BeginNativeCallFromCsharpToIOS(byte[] data)
{
_nsData = NSData.FromArray(data);
// non blocking takes 1 minute to complete
_theNativeIosObject.BeginNativeCallToIosHere(nsData);
}
// later on when we are notified that the native call has completed
public void Cleanup()
{
_nsData?.Dispose();
_nsData = null;
}
这真的有必要吗?有什么想法吗?
答: 暂无答案
评论