ios - 内存管理如何在 Xamarin.IOS 上工作

标签 ios xamarin.ios xamarin

我正在尝试了解在使用 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/

相关文章:

c# - 将图像从 iPhone 复制到应用程序

c# - 使用 Xamarin.Android 为 Parse.com 服务器制作更漂亮的 Facebook 登录屏幕

ios - Xamarin iOS UiPickerView 教程

android - 使用 Google Play 服务构建 Xamarin.Android 项目时出错

ios - 退出 .ipa 文件后,带有 Spotify 的 iPhone 应用程序崩溃

ios - 在 View Controller 之间传递数据

uitableview - 单点触控 : The correct way to reuse a UITableViewCell

iphone - UIButton 的响应时间

ios - 由 NSTimer 触发的 segue

ios - HealthKit 权限,WatchOS 和 iOS 都需要吗?