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

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

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

Ответ 1

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

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

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

Ответ 2

Существует большое обобщение в документах Xamarin Здесь