Monotouch: сборщик мусора, управляемые и неуправляемые объекты - PullRequest
0 голосов
/ 31 августа 2011

Я пытаюсь понять, как работает MT GC, чтобы избежать утечек памяти в приложениях iOS, использующих (MonoTouch) MT.

Как я понял (поправьте меня, если я ошибаюсь), управление памятью MT работает следующим образом: у каждого объекта есть флаг, который говорит: «Уважаемый GC, теперь я могу быть освобожден, когда захочешь». Когда GC запускается, он проверяет этот флаг и удаляет объект из памяти. Таким образом, MT помещает каждый объект в своего рода неопределенность, где объекты в нем будут освобождены (возможно, следующий цикл событий). Это своего рода механизм автоматического распространения. Но также возможно освободить explicity объект, вызывающий его метод dispose. В этом случае это означает использование механизма удержания-отпускания.

Читая о MT, я видел, что есть объекты, которые попадают в управляемую кучу (например, ссылки на изображения) и другие объекты, которые входят в неуправляемую кучу (например, изображения). В первом случае (управляемом) мне не о чем беспокоиться, GC работает хорошо. Во втором (неуправляемый случай) я должен освободить память. Почему эта разница? Не могли бы вы объяснить мне, как я могу отличить управляемые от неуправляемых объектов и когда освобождать простоту памяти, вызывающей метод dispose?

Заранее спасибо.

1 Ответ

1 голос
/ 31 августа 2011

Ваше описание не совсем верно.Потратьте время, чтобы прочитать Microsoft документацию о GC (не ГБ ;-) и .NET, затем прочитайте о текущем GC Моно (и это )следующая версия - даже если она еще не используется для MonoTouch).

Как только вышеприведенное станет ясным, вы увидите общую проблему, когда небольшой управляемый объект может вызвать некоторые проблемы (но не утечки), когдаэто большой неуправляемый объект.Использование IDisposable может решить эту проблему, поскольку дает вам больший контроль над завершением объектов.

Подробно документация о том, как (и когда) использовать это.

...