2011-10-14 5 views
12

Estoy evaluando el cambio a ARC (conteo automático de referencias) y la refactorización para aplicar a mi código. Entre las cosas que tengo que averiguar, no es lo siguiente:El artículo de UIViewController didReceiveMemoryWarning en el entorno ARC

qué debería hacer en didReceiveMemoryWarning si la liberación explícita de objetos no está permitido por ARC? la actualidad, utilizo ese método para liberar los objetos que pertenecen a mi controlador y que son fácilmente recuperables a través de captadores perezosos:

- (void)didReceiveMemoryWarning { 
    [_foo release]; _foo = nil; 
    [super didReceiveMemoryWarning]; 
} 

y lo relativo getter perezoso:

- (Foo *)foo { 
    if (_foo) { 
     return _foo; 
    } 
    return (_foo = [[Foo alloc] init]); 
} 

Parece imposible poner en práctica tales " patrón "en ARC ... entonces, ¿qué debería hacer? ¿Se debe considerar Rechazo de MemoriasMemoria como "obsoleto"/inútil en ARC?

Respuesta

20

ARC maneja el código de retención y liberación, por lo que establecer _foo ser nil es suficiente para permitir que el código generado por ARC realice la publicación. No lo liberas explícitamente, simplemente administras tu gráfico de objetos y el código generado por ARC realizará el lanzamiento cuando corresponda.

Lea el documento Transitioning To ARC Release Notes de Apple para obtener más información.

0

Puede hacer varias cosas, pero todas son específicas de la aplicación. Cosas como borrar arreglos y diccionarios y configurar referencias de objetos a nil (la forma en que ARC elimina los objetos).

Cuestiones relacionadas