FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Forms con Reference Counting
En algunos casos puede ser util o necesario tener forms que implementen el conteo de referencias de modo tal que cuando la cantidad de referencias llega a 0, el form se destruye y se libera la memoria; si se desean usar interfaces e implementarlas usando algun descendiente de TForm
Al declarar una interfaz, implicitamente hereda de IInterface, por lo tanto si nuestro form implementa cualquier interfaz, necesariamente debe implementar IInterface; si bien es cierto que la clase TComponent (la cual es ancestro de TForm), implementa IInterface de manera tal que se deshabilita el reference counting, nosotros podemos "re-implementarla" para habilitarlo nuevamente. Asi podemos utilizar interfaces en lugar de clases obteniendo bastante flexibilidad a la hora de programar; y tambien somos buenos samaritanos y no creamos aplicaciones con fugas de memoria La implementacion es basicamente "copia y pega" de la clase TInterfacedObject. Necesitaremos una clase para el form con reference counting para el framework VCL y otra para el framework FMX Primero vamos con la querida Vcl, en donde es algo mas facil ya que es terreno de los compiladores tradicionales para Windows y no tenemos que lidiar con multiplataforma:
Aun asi, decidi dejar la posibilidad de utilizar la clase con el modelo de memoria de TComponent (es decir, basado en Owner). Tenemos dos constructores: el constructor Create el cual se debe utilizar cuando queremos utilizar el form como una interface; y el constructor CreateOwned el cual es el que se debe utilizar cuando queremos que otro componente maneje el tiempo de vida Al utilizar el constructor CreateOwned el reference counting se deshabilita; aun asi, se puede seguir utilizando variables de tipo interfaz para referenciar el form, y todo va a estar bien siempre y cuando se haya inicializado con un TComponent como Owner valido Ahora, la implementacion para FMX, que es un pelin mas compleja:
Si bien la implementacion parece muy de bajo nivel, como comentaba mas arriba, es una replica de lo que hace TInterfacedObject Solo he podido probar las dos clases en Windows y Android y todo parece ir bien Saludos Última edición por AgustinOrtu fecha: 22-02-2017 a las 07:51:17. |
#2
|
||||
|
||||
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#3
|
||||
|
||||
Oye Antonio.... ¿este tío tan listo de dónde lo habéis sacado? ¿es un marciano o algo?
__________________
Be water my friend. |
#4
|
||||
|
||||
Es un robot con inteligencia artificial que hemos puesto en marcha
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#5
|
||||
|
||||
Gracias compi,
Curioso el tema este. |
#6
|
||||
|
||||
Cita:
|
#7
|
||||
|
||||
¡Caramba! Hoy está que echa lumbre!
LineComment Saludos |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Invalid Cursor Reference | germancbaarg | SQL | 1 | 24-06-2011 21:52:31 |
invalid column reference en un group by | juanpe | SQL | 4 | 20-06-2007 12:46:27 |
CHULETA - Delphi Technical Reference | Neftali [Germán.Estévez] | Varios | 2 | 03-04-2007 15:19:39 |
object reference not set to | arantzal | Varios | 3 | 27-01-2005 13:05:55 |
Essential XML Quick Reference | jachguate | Noticias | 2 | 18-08-2004 19:59:19 |
|