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