¿Por qué MonoTouch GC no puede matar objetos gestionados con refcount> 1?

Creo que me estoy acercando a la comprensión.Cómo viven juntos Mono GC y ObjC ref refinging.

La forma en que funciona es que cuando un objeto nativo tiene un recuento de referencia de 1, no evitamos que la instancia administrada obtenga basura.Tan pronto como el recuento de referencia aumenta por encima de 1, evitamos que la instancia administrada obtenga basura.

Esto se debe a que un objeto gestionado puede contener el estado del usuario. Para los objetos administrados que están reflejando un objeto nativo correspondiente (como la instancia UIView administrada) MonoTouch sabe que la instancia no puede contener ningún estado, por lo que tan pronto como ningún código administrado tenga una referencia a la instancia administrada, el GC puede recopilarlo. Si se requiere una instancia administrada en una etapa posterior, solo creamos una nueva.

Así que si creo unCustomButton que heredaUIButton, agregarlo como subvista a miView, deje que la referencia administrada se salga de alcance y luego ejecute GC, estemanejado CustomButton todavía no será elegible para la colección.

¿Por qué no se puede recoger? Por supuesto que puede haber estado gestionado como propiedades,pero si no hay un enlace a él desde objetos gestionados, a quién le importa este estado? Puede que simplemente desaparezca, ¿por qué no puede?

Estoy pensando en una posible razón: suscribirme aCustomButton los eventos no lo mantendrán vivo para el GC, por lo que cuando el objeto se recolecta, los eventos dejan de activarse. Esto quizás resultaría en un comportamiento inesperado.

¿Es esto correcto? ¿Existen otras razones para mantener vivo el objeto gestionado incluso si nadie lo vincula?

Respuestas a la pregunta(1)

Su respuesta a la pregunta