2011-03-23 11 views

Respuesta

18

se debe cambiar a ...

dispatch_queue_t myQueue = dispatch_queue_create("com.mysite.page", 0); 
dispatch_async(myQueue, ^{}); 
dispatch_release(myQueue); 

... debe llamar dispatch_release cuando ya no se necesita un acceso a la cola. Y como myQueue es una variable local, usted debe llamar al allí.

Leer la documentación dispatch_queue_create:

Discusión

Bloques envía a la cola se ejecutan uno a la vez en orden FIFO. Sin embargo, tenga en cuenta que los bloques enviados a colas independientes se pueden ejecutar simultáneamente entre sí.

Cuando su aplicación ya no necesita la cola de distribución, debe liberarla con la función dispatch_release. Cualquier bloque pendiente enviado a una cola contiene una referencia a esa cola, por lo que la cola no se desasigna hasta que se hayan completado todos los bloques pendientes.

+0

¿Sigue siendo cierto? Con ARC no necesitamos lanzarlo – hfossli

4

La herramienta de fuga informa dónde se asigna la memoria que ya no tiene referencias de su código.

Después de que se ejecute este método, ya que no hay nada que tenga una referencia a la cola que creó, y nunca se llamó a dispatch_release(), se considera una pérdida.

+1

Incluso ARC doensn't manejar eso para usted. Por lo tanto, debe liberarlo también: dispatch_release (myQueue) .. – geforce

Cuestiones relacionadas