Si tengo un trozo de código que se parece a esto:duración de las variables locales débiles con ARC
- (void)testSomething
{
__weak NSString *str = [[NSString alloc] initWithFormat:@"%@", [NSDate date]];
NSLog(@"%@", str);
}
la salida será (nulo) ya que no existen fuertes referencias a str y se dará a conocer de inmediato después de asignarlo. Esto tiene sentido y se explica en la guía Transición a ARC.
Si mi código es el siguiente:
- (void)testSomething
{
__weak NSString *str = [NSString stringWithFormat:@"%@", [NSDate date]];
NSLog(@"%@", str);
}
luego imprime correctamente a la fecha actual. Obviamente, esperaría que funcionara en un mundo que no sea ARC, ya que str
se lanzaría automáticamente y, por lo tanto, sería válido hasta que este método finalice. Sin embargo, en el código habilitado para ARC, las personas generalmente consideran que los dos formularios (stringWithFormat
& alloc/initWithFormat
) son equivalentes.
Así que mi pregunta es si el código como el segundo ejemplo está garantizado para trabajar bajo ARC. Es decir, si tengo una referencia débil a un objeto que obtengo a través de lo que normalmente consideraríamos un constructor de conveniencia de autorrelleno, ¿está seguro de para usar esa referencia en el mismo alcance que normalmente tendría sin ARC (es decir, hasta que el método sale)?
Pregunta interesante, pero sospecho que la mejor respuesta es "no deberías preocuparte". –
Probablemente tengas razón. Esta pregunta es realmente solo para asegurarme de que entiendo las respuestas a algunas otras preguntas que he visto. – UIAdam
UIAdam, estoy con Kevin en este caso. Deje que el compilador se preocupe por la asignación de memoria. '__weak' es un método algo ineficaz para controlar el tiempo de vida de las instancias. Si desea controlar explícitamente la duración del artículo, utilice el formulario '+ alloc' asignado a una referencia fuerte. Entonces nula esa referencia al salir. Sin mencionar una referencia es el nuevo '-release'. IMO, '__weak' se usa para romper los ciclos de retención, nada más. Andrew P.S. Con ARC, todos deberíamos "recostarnos y pensar en Inglaterra". – adonoho