¿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 paraProblem
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.
davy.ai
deinit
no se llama la primera vez es porque el objetolist
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.deinit
siempre será llamado paraProblem
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 adeinit
.