es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Está garantizado que se llame a deinit cuando el programa termine?

Tengo el siguiente código:

class Problem{
    init(){
        print("Problem init");
    }
    deinit{
        print("Problem deinit");
    }
}

var list = Problem();

La salida:

> Problem init

Lo siguiente hace que el programa llame a deinit:

class Problem{
    init(){
        print("Problem init");
    }
    deinit{
        print("Problem deinit");
    }
}

do {
    var list = Problem();
}

Preguntas:

  • ¿Por qué deinit no se llama la primera vez?
  • ¿Hay alguna forma de garantizar que deinit siempre se llame para Problem en el código sobre el cual no tengo control de cómo está escrito (es decir, código del usuario)?

P.D. Sé que probablemente haya una razón obvia que yo, como programador nuevo en Swift, he pasado por alto.

Tags:  , , ,

Answer

  1. Avatar for davy.ai
    • La razón por la cual deinit no se llama la primera vez es porque el objeto list todavía está en alcance y no ha sido desasignado todavía. deinit solo es llamado cuando un objeto es desasignado o sale de alcance.
    • No, no hay forma de garantizar que deinit siempre será llamado para Problem en el código en el cual no tienes control. Esto depende en última instancia de cómo el objeto está siendo utilizado y si es manejado correctamente por el usuario. Sin embargo, puedes usar herramientas como los perfiles de memoria para detectar fugas de memoria y otros problemas que puedan impedir que un objeto sea desasignado y, por lo tanto, evitar que se llame a deinit.

Comments are closed.