Я пытаюсь понять, как работает управление памятью при использовании xamarin.ios и запуске приложения на реальном устройстве iOS. Насколько я понимаю, на платформе iOS нет сборщика мусора, но платформа использует ARC (Automatci Reference Counting).
Правда ли, что скомпилированное приложение будет использовать ARC вместо сборки мусора?
Ответ 1 · рейтинг 33 · miguel.de.icaza
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 определяет, что объект больше не доступен никакому управляемому коду, сборщик мусора вызывает освобождение объекта.