objective-c object release autorelease nsautoreleasepool

objective c - ¿Qué es autoreleasepool?



objective-c nsautoreleasepool (1)

Posible duplicado:
¿Por qué usar Autorelease pool?

Toda la página de inicio de Objective-C se abre con una @autoreleasepool{...} predeterminada bajo la declaración de la función principal. Pero, ¿qué está haciendo realmente esta declaración? El nuevo Objective-C libera objetos automáticamente y eliminar la línea no cambia nada al programa. ¿Es este comando realmente necesario?


La sentencia @autoreleasepool está haciendo el mismo trabajo que antes, en lugar de utilizar la clase NSAutoreleasePool . La forma en que funcionaba el NSAutoreleasePool era un poco extraño, ya que crearlo causaba un efecto en toda la aplicación; @autoreleasepool crea un área @autoreleasepool y aclara lo que hay dentro del grupo y cuándo se agota (cuando se sale del alcance). También es más eficiente según Apple.

El concepto de un grupo de autorrelease es simple, siempre que una instancia de objeto se marque como autorrelease (por ejemplo, NSString* str = [[[NSString alloc] initWithString:@"hello"] autorelease]; ), tendrá un conteo retenido de + 1 en ese momento en el tiempo, pero al final del ciclo de ejecución, el grupo se drena, y cualquier objeto marcado con liberación automática tiene su cuenta de retención decrementada. Es una forma de mantener un objeto alrededor mientras preparas lo que sea que lo retenga por sí mismo.

Con ARC, aunque el autorelease no usa la palabra clave de autorelease , el sistema subyacente que administra ARC lo inserta por usted. ( Recuerde: Todo lo que ARC está haciendo es insertar las llamadas de retain , release y release autorelease en el momento apropiado). Debido a esto, el concepto existente de AutoreleasePool necesita mantenerse.

Si quita el grupo de autorrelease, sus objetos comenzarán a filtrarse

En un entorno contado de referencia, Cocoa espera que haya un grupo de autorrepetición siempre disponible. Si un grupo no está disponible, los objetos liberados automáticamente no se liberan y usted pierde memoria. En esta situación, su programa normalmente registrará mensajes de advertencia adecuados.