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

gyu*_*isc 17 xamarin.ios ios xamarin

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

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

mig*_*aza 30

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

foo = bar
Run Code Online (Sandbox Code Playgroud)

其中"foo"和"bar"是NSObjects的代码如下:

if (foo != null)
   [foo release];
if (bar != null)
   [bar retain]
foo = bar;
Run Code Online (Sandbox Code Playgroud)

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

Objective-C库使用什么(ARC或没有ARC)对MonoTouch来说并不重要,因为它们使用现有的文档协议来保留何时以及何时释放.MonoTouch遵循这些规则.

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

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


Blo*_*nty 7

有一个在Xamarin文档很大概要这里