5

Yo quería una manera rápida y fácil de obtener datos de URL sin tener que meterme con delegates.GCD dispatch_async y NSURLConnection

¿Hay algún problema con lo siguiente?

// Use gcd 
dispatch_queue_t queue = dispatch_queue_create("com.dowork", 0); 
dispatch_queue_t main = dispatch_get_main_queue(); 

// do the long running work in bg async queue 
// within that, call to update UI on main thread. 
dispatch_async(queue, ^{ 

    // Do work in the background 
    NSData *response = [NSURLConnection sendSynchronousRequest:serviceRequest returningResponse:&serviceResponse error:&serviceError]; 

    dispatch_async(main, ^{ 

     // Update UI 
     self.data = response; 
     [self.tableView reloadData]; 


    });//end 
});//end 

pensé que leí en alguna parte hace mucho tiempo que utilizando el método sincrónico NSURLConnection en un subproceso de fondo causaría pérdidas de memoria. ¿Es esto cierto?

¿Hay algún problema con los códigos que se publican allí? ¿Algún problema con la asignación de los datos a self.data dentro del bloque?

Respuesta

4

si se dirigen a IOS5 y más tarde, hay de NSURLConnection sendAsynchronousRequest:queue:completionHandler:

Para responder a su pregunta específica, que me parece response pueda filtrarse: No sé si hay una piscina autorelease implícita en las roscas GCD.

Investigue un poco ahora: los subprocesos GCD tienen sus propios grupos de liberación automática pero no sabe cuándo se agotan. Probablemente desee poner entre paréntesis las dos primeras declaraciones con un grupo de autorrelease explícito.

Ver también Do you need to create an NSAutoreleasePool within a block in GCD?

+0

Soy consciente de que, y han probado algunas implementaciones con él. Pero, todavía está limitado por lo que tengo que hacer. El método que muestro arriba es tan agradable y fácil de obtener 'NSData', todos los demás métodos asíncronos parecen ser un proceso de 2 pasos con delegados. Entonces, todavía me pregunto acerca de mi pregunta original. –

+0

@Nic: actualizó mi respuesta – JeremyP

+0

Gracias, ¿así que piensas que es seguro hacerlo de esta manera, siempre y cuando agregue mi propio grupo de autorrelease? –

Cuestiones relacionadas