我正在尝试了解使用 xamarin.ios 并在实际 iOS 设备上运行该应用程序时内存管理的工作原理。我的理解是iOS平台没有垃圾收集器,但是平台使用ARC(Automatci Reference Counting)。
编译后的应用程序真的会使用 ARC 而不是垃圾回收吗?
ARC是一项适用于Objective-C编译器编译的源代码的技术,它的作用是将每个赋值变成这样:
foo = bar
其中“foo”和“bar”是 NSObject,如下代码:
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。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)