我正在尝试了解在使用 xamarin.ios 并在实际 iOS 设备上运行应用程序时内存管理的工作原理。我的理解是iOS平台没有垃圾收集器,但是平台使用了ARC(Automatci Reference Counting)。
编译后的应用程序是否真的会使用 ARC 而不是垃圾回收?
最佳答案
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 来说并不重要,只要它们使用现有的记录协议(protocol)来确定何时保留和何时释放。 MonoTouch 只是遵循这些规则。
C# 对象没有保留/释放代码路径,而是仅使用 GC 来确定哪些对象是存活的。
当 Objective-C 对象出现在 C# 世界中时,Monotouch 获取一个引用(它调用 retain)。当 MonoTouch GC 确定任何托管代码都无法再访问某个对象时,GC 会调用该对象的释放。
关于ios - 内存管理如何在 Xamarin.IOS 上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18056563/