Как работает управление памятью в Xamarin.IOS

Я пытаюсь понять, как работает управление памятью при использовании xamarin.ios и запуске приложения на реальном устройстве iOS. Насколько я понимаю, на платформе iOS нет сборщика мусора, но платформа использует ARC (Automatci Reference Counting).

Правда ли, что скомпилированное приложение будет использовать ARC вместо сборки мусора?


person gyurisc    schedule 05.08.2013    source источник
comment
Хорошая презентация на тему: Расширенное управление памятью в iOS и Android — Evolve 2013 xamarin.com/evolve /2013#session-0w86u7bco2   -  person James Moore    schedule 18.08.2014


Ответы (2)


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 или нет), на самом деле не важно для MonoTouch, поскольку они используют существующий задокументированный протокол для того, когда сохранять и когда выпускать. MonoTouch просто следует этим правилам.

Объекты C# не имеют пути кода сохранения/освобождения, вместо этого они просто используют сборщик мусора, чтобы определить, какие объекты активны.

Когда объекты Objective-C отображаются в мире C#, Monotouch берет ссылку (она вызывает сохранение). Когда сборщик мусора MonoTouch определяет, что объект больше не доступен никакому управляемому коду, сборщик мусора вызывает освобождение объекта.

person miguel.de.icaza    schedule 05.08.2013
comment
Когда объекты Objective-C отображаются в мире C#, Monotouch берет ссылку (она вызывает сохранение). Когда сборщик мусора MonoTouch определяет, что объект больше не доступен никакому управляемому коду, сборщик мусора вызывает релиз объекта. Меня это смущает. В Xamarin.ios мы используем только C# без цели C.. Вы хотите сказать, что для всего, что мы создаем в C#, monotouch создает эквивалентную вещь с использованием Objective C... если бы вы могли пролить свет на это, было бы хорошо - person Durai Amuthan.H; 09.02.2017

В документации по Xamarin есть отличное обобщение здесь

person Blounty    schedule 05.08.2013
comment
Спасибо за ссылку. Это очень полезно. - person gyurisc; 07.08.2013