【问题标题】:How does memory management works on Xamarin.IOS内存管理如何在 Xamarin.IOS 上工作
【发布时间】:2013-08-05 11:00:54
【问题描述】:

我正在尝试了解在使用 xamarin.ios 并在实际 iOS 设备上运行应用程序时内存管理的工作原理。我的理解是iOS平台没有垃圾收集器,但是平台使用了ARC(Automatci Reference Counting)。

编译后的应用程序将使用 ARC 而不是垃圾收集,这是真的吗?

【问题讨论】:

标签: ios xamarin.ios xamarin


【解决方案1】:

ARC 是一种适用于 Objective-C 编译器编译的源代码的技术,它具有将每个赋值转换成这样的效果:

foo = bar

其中“foo”和“bar”是NSObjects 放入以下代码:

if (foo != null)
   [foo release];
if (bar != null)
   [bar retain]
foo = bar;

如您所见,这只是一个编译器技巧,它会重写您的代码,因此您不会忘记保留/释放内容,并且仅适用于 Objective-C。

Objective-C 库使用什么(ARC 或无 ARC)对 MonoTouch 来说并不重要,只要它们使用现有的文档化协议来确定何时保留和何时释放。 MonoTouch 只是遵循这些规则。

C# 对象没有保留/释放代码路径,而只是使用 GC 来确定哪些对象是存活的。

当 Objective-C 对象出现在 C# 世界中时,Monotouch 会获取一个引用(它调用 retain)。当 MonoTouch GC 确定任何托管代码都无法再访问某个​​对象时,GC 会对该对象调用 release。

【讨论】:

  • 当 Objective-C 对象出现在 C# 世界中时,Monotouch 获取一个引用(它调用了 retain)。当 MonoTouch GC 确定任何托管代码都无法再访问某个​​对象时,GC 会在该对象上调用 release。 我对此感到困惑。在 Xamarin.ios 中,我们只使用 C# 而不是 Objective C .. . 你的意思是说,对于我们在 C# 中创建的所有东西,monotouch 使用 Objective C 创建了一个等价的东西......如果你能对此有所了解,那就太好了
【解决方案2】:

Xamarin 文档Here 中有一个很好的总结

【讨论】:

  • 感谢您的链接。它非常有用。
猜你喜欢
  • 1970-01-01
  • 2017-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-12
  • 2012-07-22
相关资源
最近更新 更多