Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Creación y destrucción de objetos.

Iniciado por Tizon, Diciembre 26, 2017, 02:02:41 PM

Tema anterior - Siguiente tema
Hola a todos.
 
Primero feliz navidad y entrada de año a todos.
 
He comprobado que si creas una clase que no herede de nada, puedes ejecutar los constructores. A partir de aquí, mis preguntas. Del mismo modo, si implemento destructores se ejecutarán? Y siguiendo con ello. Hay alguna forma de marcar estos objetos para el borrado? Y siendo así, el destructor cuando se ejecutará? Al marcarlo para el borrado o cuando el sistema efectivamente lo borre? La verdad es que llevo unas cuantas horas buscando información al respecto y me resulta confuso.
 
Muchas gracias a todos.

Cita de: Tizon date=1514293361Hola a todos.
   
   
      Primero feliz navidad y entrada de año a todos.
   
   
      He comprobado que si creas una clase que no herede de nada, puedes ejecutar los constructores. A partir de aquí, mis preguntas. Del mismo modo, si implemento destructores se ejecutarán? Y siguiendo con ello. Hay alguna forma de marcar estos objetos para el borrado? Y siendo así, el destructor cuando se ejecutará? Al marcarlo para el borrado o cuando el sistema efectivamente lo borre? La verdad es que llevo unas cuantas horas buscando información al respecto y me resulta confuso.
   
   
      Muchas gracias a todos.
   


Puedes heredar y aun así utilizar el constructor de la clase, pueden enviar variables a la clase base entre otras cosas, las herencias es algo muy utilizado en la programación orientada a objetos, en el caso de la clase MonoBehaviour no se puede llamar el constructor por la razón que Unity utiliza estas clases tantos para el editor como el runtime, si por ejemplo, queres desde el constructor realizar X tarea como setear valores cada vez que el editor serialize el objeto se perderán posibles configuraciones manuales.
 

public class MiClase : MonoBehaviour
{
public int VariableEditable;
public MiClase()
    {
   VariableEditable = 10;
    }
}

 
En este caso, aunque cambies los valores desde el editor cada vez que se llame a serialización se va a cambiar el valor a diez - para estas tareas esta la función Awake que sirve justamente para suplantar el constructor de las clases MonoBehaviour -
 
Sobre como los objectos se destruyen y como trabaja GC en .NET te dejo este aporte es bastante simple y bueno para entender -
 
https://blogs.msdn.microsoft.com/daniem/2009/07/09/cosas-que-deberas-saber-sobre-el-garbage-collector-de-net/
 
Luego desde Google busca un par de foros sobre como funciona GC en Unity, por que si no mal recuerdo tiene un forma especifica de trabajar para que esto no sea un problema para las diferentes plataformas -

Cita de: francoe1 date=1514295754Puedes heredar y aun así utilizar el constructor de la clase, pueden enviar variables a la clase base entre otras cosas, las herencias es algo muy utilizado en la programación orientada a objetos, en el caso de la clase MonoBehaviour no se puede llamar el constructor por la razón que Unity utiliza estas clases tantos para el editor como el runtime, si por ejemplo, queres desde el constructor realizar X tarea como setear valores cada vez que el editor serialize el objeto se perderán posibles configuraciones manuales.
   
   

public class MiClase : MonoBehaviour
{
public int VariableEditable;
public MiClase()
    {
   VariableEditable = 10;
    }
}

   
      En este caso, aunque cambies los valores desde el editor cada vez que se llame a serialización se va a cambiar el valor a diez - para estas tareas esta la función Awake que sirve justamente para suplantar el constructor de las clases MonoBehaviour -
   
   
      Sobre como los objectos se destruyen y como trabaja GC en .NET te dejo este aporte es bastante simple y bueno para entender -
   
   
      https://blogs.msdn.microsoft.com/daniem/2009/07/09/cosas-que-deberas-saber-sobre-el-garbage-collector-de-net/
   
   
      Luego desde Google busca un par de foros sobre como funciona GC en Unity, por que si no mal recuerdo tiene un forma especifica de trabajar para que esto no sea un problema para las diferentes plataformas -
   


Muchas gracias, Francoe.
 
Es una de las referencias que había visto. También he visto las de la documentación de Unity y he visto que dispone de funcionalidades concretas para la destrucción de GameObjects (destroy) y me preguntaba si había algún método similar en C# para los objetos que no heredan de GameObject. Me explico muy rápido. El GameObject dispone de distintas colecciones de Objetos que se van añadiendo y eliminando con una cierta asiduidad y rapidez. Los objetos no dejan de ser una agrupación de datos y de funcionalidades básicas que uso exclusivamente para mantener en un cierto orden la información. Estos objetos no son lo suficientemente grandes como para que su generación y eliminación supongan un problema de rendimiento, pero si que pueden llegar a ser miles, así que si no se limpian adecuadamente... Supongo que la solución sería hacer pooling, pero precisamente cantidad y por lo breve de su tamaño, me temo que la gestión del pooling si acabara por ralentizar el sistema, aparte de que son muchas las clases diferentes y la gestión del pooling de eso si que puede acabar siendo una pesadilla...

Etiquetas: