内存管理如何在Xamarin.IOS上运行

时间:2013-08-05 11:00:55

标签: ios xamarin.ios xamarin

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

编译后的应用程序是否会使用ARC而不是垃圾回收?

2 个答案:

答案 0 :(得分:30)

ARC是一种适用于Objective-C编译器编译的源代码的技术,它具有如下所示的每个赋值的效果:

foo = bar

其中“foo”和“bar”是NSObjects,代码如下:

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

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

对于MonoTouch,Objective-C库使用哪些(ARC或不使用ARC)并不重要,只要它们使用现有的文档协议来保留何时以及何时释放。 MonoTouch遵循这些规则。

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

当Objective-C对象浮出水面时,Monotouch会引用一个引用(它会调用retain)。当MonoTouch GC确定任何托管代码无法再访问某个​​对象时,GC会调用该对象的版本。

答案 1 :(得分:7)

Xamarin docs Here

中有一个很好的总结