2012-10-04 19 views
20

Siguiendo un tutorial de iOS 5 sobre el curso Paul Hegarty, vemos este código en una aplicación que demuestra el uso de GCD. Aparentemente, GCD requiere liberación debido a problemas relacionados con el hecho de que los subprocesos múltiples son algo impredecibles en cuanto a los objetos que aún se necesitan.¿Necesita liberar colas GCD bajo ARC en iOS 6.0?

dispatch_async(dowloadQueue, ^{ 
    .... 
    // do some stuff 
    .... 
    }); 
    dispatch_release(dowloadQueue); 

He actualizado a iOS 6 y XCode 4.5 y obtener una "ARC prohíbe liberación explícita ..." mensaje de

no probé este código bajo iOS5/XCode 4.2

¿Esto es solo porque ARC se volvió más inteligente y ya no necesito liberarme en GCD? ¿O acabo de malinterpretar?

Respuesta

29

Cuando se dirige a Mountain Lion y iOS 6.0, ARC ahora administrará las colas de despacho y otros tipos de GCD por usted. Si apuntas a versiones anteriores de OS X o iOS, necesitarás retener y liberar explícitamente los tipos de GCD (no solo por razones de seguridad de hilos, de lo contrario perderás la memoria), pero esto se maneja solo cuando apuntas al sistema operativo más nuevo. versiones.

Es por eso que ve un error de compilador en ARC cuando se dirige a iOS 6.0.

+0

¿Necesita __bridge_transfer a Objective-C cuando crea la cola? – openfrog

+0

@openfrog - No, si se trata como un objeto Objective-C, ya lo maneja ARC, por lo que no es necesario transferirlo. –

+0

@BradLarson ¿Hay alguna manera de apagar esto? O, ¿cómo lo escribo para que se compile en iOS 5 e iOS 6? – fishinear

Cuestiones relacionadas