La respuesta breve a su pregunta es: "cuando se cierra el programa".
Las variables estáticas se asignan al principio de su programa, antes de que comience la función main()
. Del mismo modo, se lanzarán al final de su programa, poco después de las salidas main()
. Esta gestión de la memoria es manejada por el tiempo de ejecución de Objective-C, y todo sucede detrás de las escenas.
Si está intentando controlar este comportamiento, probablemente no tenga mucha suerte. Por ejemplo, si se hizo lo siguiente en una clase personalizada, y luego utiliza esa clase como un miembro estático de otra clase:
- (void)dealloc
{
NSLog(@"I am being deallocated");
[super dealloc];
}
Usted nunca verá este mensaje aparecen en el registro. Hay un par de razones para esto. Uno, las variables que NSLog()
requieren ya pueden haber sido desasignadas como parte del procedimiento de apagado normal. Y dos, porque el sistema de tiempo de ejecución simplemente puede liberar toda la memoria restante en una sola toma, sin molestarse en llamar a los métodos dealloc
.
Esto puede ser problemático si su clase personalizada hace algo importante en su método dealloc
. Si este es el caso, considere escribir un método personalizado cleanup
que llame para estos objetos justo antes de que el programa salga.
Acabo de encontrar esta pregunta mientras aprendía Obj-C. Apple parece sugerir que no existe una "variable de clase" y que lo que ha definido en la interfaz es más bien un método de clase *, que es independiente de la variable estática y, por lo tanto, debe definirse en la implementación. La variable estática está limitada al alcance de la implementación * file *, no a la clase en sí misma. Tal vez esta es una pequeña objeción, pero me confundió por un segundo: http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Conceptual/ObjectiveC/Articles/ocObjectsClasses.html#//apple_ref/doc/ uid/TP30001163-CH11-TPXREF118 –