objective c - literatura - ¿Por qué conservar una variable estática?
variable estatica java (2)
Una versión simplificada de la respuesta aceptada de Jonathan Grynspan:
La retain
no es para la variable que apunta a un objeto. Esa variable durará para siempre porque es estática. La retain
es para el objeto al que apunta la variable. Sin la retain
el objeto podría (y debería) ser desasignado. Entonces tienes una variable que apunta a una cosa que causará un sigabrt
. Esta variable que apunta a ninguna parte se conoce como un "puntero colgante".
Para el contexto ARC, lo mejor que puede hacer es declarar la variable estática como fuerte, así que algo como esto:
static ThatClass * __strong thatStaticVariable;
Esto garantiza que el objeto al que thatStaticVariable
esa thatStaticVariable
será un objeto válido (es decir, que nunca se desasigne) una vez asignado. Sin embargo, realmente no necesita la palabra clave __strong en absoluto, porque es la predeterminada (así lo dice la documentación , gracias a @zpasternack) , así que solo use
static ThatClass *thatStaticVariable;
y tu eres buena
Nota: siempre = mientras la aplicación se está ejecutando
¿No es innecesario retener una variable estática ya que permanece alrededor durante la duración del programa, no importa si lo liberas?
Consulte este código: https://github.com/magicalpanda/MagicalRecord/blob/master/Source/Categories/NSManagedObjectContext+MagicalRecord.m#L24-29
Supongo que te refieres a un puntero de objeto estático, como static NSString *foobar;
.
Dichas variables tienen una duración de por vida mientras la aplicación, pero las variables de las que estamos hablando son solo indicadores . En Objective-C, los objetos siempre se asignan dinámicamente, por lo que siempre los abordamos con un puntero a su tipo, pero los datos subyacentes de un objeto todavía están presentes en el azul salvaje asignado dinámicamente.
Aún debe conservar el objeto porque, aunque el puntero al objeto nunca saldrá del ámbito, el objeto en sí puede ser desasignado como cualquier otro objeto, y su puntero terminará apuntando a la basura, o peor aún, otro objeto no relacionado .