2010-03-31 9 views
7

En cuanto a la gestión de la memoria Delphi, ¿cuáles son sus estrategias de diseño?Estrategias de diseño de administración de memoria Delphi: ¿objeto o interfaz?

  • ¿Cuáles son los casos de uso en los que prefiere crear y liberar objetos manualmente?
  • ¿Cuáles son los casos de uso en los que se preferirán las interfaces, los objetos interconectados y su mecanismo de recuento de referencias?

¿Ha identificado algunas trampas o dificultades con los objetos de referencia contados?

Gracias por compartir su experiencia aquí.

Respuesta

7

Siempre que comparta objetos entre subprocesos es mejor usar interfaces. Un objeto compartido no tiene necesariamente un propietario identificable, por lo que el hilo que cede la última referencia a la interfaz libera el objeto de implementación. Consulte el OmniThreadLibrary para obtener un buen ejemplo de cómo hacer uso de las interfaces para el diseño y para superar algunos de los problemas de propiedad complicados en el código de subprocesos múltiples.

1

Siempre debe preferir las interfaces a menos que no sea posible debido a las restricciones de VCL. Sospecho que, si las interfaces hubiesen estado disponibles en Delphi 1.0, la VCL habría resultado ser muy diferente.

Una consideración menor es tener cuidado con los ciclos de referencia. Si A tiene una interfaz para B y B tiene una interfaz para A, ambos vivirán para siempre.

+0

¿Podría detallar esas restricciones de VCL, por favor? –

+3

Simplemente que muchas de las clases de VCL utilizan diferentes mecanismos para la gestión de la memoria, y no se puede simplemente deslizar una interfaz en el medio. El caso obvio son los hijos de TComponent, que son propiedad del padre y se destruyen cuando se destruye. –

+2

Los componentes de VCL pueden tener todo tipo de referencias entre sí, la implementación de Componentes como interfaces causaría una pesadilla de referencia circular. –

Cuestiones relacionadas