Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: gyuriscОтветов: 2

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

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

  • Хорошая презентация на тему: Расширенное управление памятью в iOS и Android - Evolve 2013 xamarin.com/evolve /2013#session-0w86u7bco2 James Moore 18.08.2014

iosxamarin

Ответы

Ответ 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 определяет, что объект больше не доступен никакому управляемому коду, сборщик мусора вызывает освобождение объекта.

Ответ 2 · рейтинг 7 · Blounty

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы