NSObject
contiene una función llamada ordenada autorelease
. Esto significa que todos los objetos en Objective-C contienen esta función.
Esta función inserta self
en la piscina autorelease, lo que retrasa la llamada de objetar release
función hasta que se cancela la asignación de la piscina autorelease. La mayoría de las API internas usan un grupo de autorrelease, y además del que se encuentra en main()
, hay uno asignado y desasignado en el bucle principal de UIKit en cada pase.
En resumen: es la cola para la disminución retardada del contador de referencia.
Ejemplo en donde se oculta autorelease:
[NSString stringWithUTF8String:"some string"];
Este objeto se asigna, y autorelease se llama en él. ¿Cómo lo usarías tú mismo?
MyObject *obj = [[[MyClass alloc] init] autorelease];
¿Por qué es esto bueno? Cuando devuelve este objeto, la función de llamada no necesita tener cuidado para liberar este objeto, y opcionalmente puede retenerlo (pero no tiene que hacerlo).
Ampliar y aclarar cuatro años más tarde:
Mientras UIKit y AppKit crear y drenar un NSAutoreleasePool
durante el curso de su runloop principal, en su programa de interfaz gráfica de usuario no necesita crear usted mismo. Varios códigos esperan tener presente un NSAutoreleasePool
, y como no inicializó un marco de GUI ni lo usa, no hay ningún código que lo cree mágicamente.
Mientras NSLog()
y una constante NSString
en su ejemplo no requieren una piscina, incluso lo trivial [NSMutableArray array]
hace, dado que en realidad puede ser interpretado como [[[NSMutableArray alloc] init] autorelease]
.
Si encuentra otra respuesta particularmente útil, siéntase libre de "subirla", y/o marcarla como correcta. –