2009-07-18 17 views
5

Estoy desarrollando para iPhone, objetivo-c. Cuando usamos la liberación automática, ¿cuándo se libera realmente el objeto, cuando se libera el grupo de autorrelease principal (es decir, la aplicación finaliza?), O tan pronto como la función local finaliza? Por ejemplo, quiero hacer algo como esto:¿Cuándo se lanza un objeto con 'liberación automática'?

 
- (void) test 
{ 
    MyObj* p = [[[MyObj alloc] init] autorelease]; 
    ... 

    // is p 'released' here? 
} 

Así es 'p' lanzado tan pronto como se cierra la función, o cuando la piscina autorelease de este hilo es liberado? Pensé que era cuando se cierra la función locales, pero acabo de crear mi propio hilo y necesario para la configuración de una piscina autorelease que me está dando dudas sobre si esto realmente sucede ..

Gracias

Respuesta

6

Un objetivo del juego es autoreleases liberado al mismo tiempo que el grupo de autorrelease. Entonces, para su hilo, se lanzará cuando libere el grupo. En el hilo principal, si no creas el tuyo propio, creo que el grupo de autorrelleno se vacía cada vez durante el ciclo de ejecución, pero no lo he visto desde hace tiempo.

+1

Aquí está el enlace a la página en grupos de autorelease: http://developer.apple.com/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html – Jonathon

1

Como dice Argothian, se libera cuando se libera la piscina autorelease, lo que ocurre cada vez que a través del bucle de ejecución en una aplicación normal de cacao, no al cierre de la aplicación (a menos que, por supuesto, usted no tiene un bucle de ejecución , en cuyo caso debe crear el grupo de autorrelease y liberarlo usted mismo). Los grupos Autorelease no conocen cada llamada de función individual y, por lo tanto, no pueden liberar elementos al final de una llamada a función.

Cuestiones relacionadas