Почему MonoTouch GC не может уничтожить управляемые объекты с refcount> 1?

Я думаю, что я близок к пониманиюкак Mono GC и ObjC ref считаются вместе.

Это работает так, что когда у нативного объекта счетчик ссылок равен 1, мы не запрещаем управляемому экземпляру собирать мусор.Как только счетчик ссылок превысит 1, мы предотвратим сборку мусора для управляемого экземпляра.

Это потому, что управляемый объект может содержать пользовательское состояние. Для управляемых объектов, которые отражают соответствующий собственный объект (например, управляемый экземпляр UIView), MonoTouch знает, что экземпляр не может содержать никакого состояния, поэтому, как только у управляемого кода нет ссылки на управляемый экземпляр, GC может его собрать. Если на более позднем этапе требуется управляемый экземпляр, мы просто создаем новый.

Так что, если я создамCustomButton что наследуетUIButton, добавьте это как подпредставление к моемуView, пусть управляемая ссылка выскользнет из области видимости и запустит GC,удалось CustomButton все еще не будет иметь право на сбор.

Почему его нельзя собрать? Конечно, он мог управлять состоянием как свойства,но если нет ссылки на него со стороны управляемых объектов, кто заботится об этом состоянии? Это может так же просто исчезнуть, почему не может?

Я думаю об одной из возможных причин: подписка наCustomButton события не будут поддерживать его работу для GC, поэтому, когда объект будет собран, события останавливаются. Это может привести к неожиданному поведению.

Это верно? Существуют ли другие причины для сохранения управляемого объекта, даже если никто не связывает его?

Ответы на вопрос(1)

Ваш ответ на вопрос