Iam tener problemas con:Cola concurrente con GCD? (IOS 4.2.1)
dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0UL);
concurrentQueue
es nil
en iOS 4.2.1 (dispositivo) pero el mismo código funciona perfectamente en otro dispositivo que se está ejecutando iOS 5.0.1.
Cuando revisé el encabezado, dice que está disponible desde iOS 4.0, ¿estoy haciendo algo mal?
El siguiente código obtiene imágenes de Internet y funciona muy bien en todo después de 4.2.1, pero no en 4.2.1, ¿por qué ideas? ¿Puedes crear una cola simultánea de alguna otra manera usando GCD?
- (void)imageFromURL:(NSString*)link {
if ([link length] == 0)
return;
dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0UL);
if (concurrentQueue == nil)
return;
dispatch_async(concurrentQueue, ^{
__block UIImage* image = nil;
dispatch_sync(concurrentQueue, ^{
NSError *error = nil;
NSURL *url = [[NSURL alloc] initWithString:link];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSData *imageData = [NSURLConnection sendSynchronousRequest:request
returningResponse:nil
error:&error];
if (error == nil && imageData != nil) {
image = [UIImage imageWithData:imageData];
} else {
DLog(@"%@", [error description]);
}
if ([self.delegate respondsToSelector:@selector(setImage:)]) {
dispatch_sync(dispatch_get_main_queue(), ^{
[self.delegate setImage:image];
});
}
});
});
}
Gracias señor, con mucho gusto acepté su respuesta! – Konrad77
Sería útil reemplazar automáticamente DISPATCH_QUEUE_PRIORITY_BACKGROUND por DISPATCH_QUEUE_PRIORITY_LOW cuando DISPATCH_QUEUE_PRIORITY_BACKGROUND no está disponible. – slatvick
¿cuál es la mejor práctica antes de iOS 5 para enviar algo a un hilo de fondo? – Tomen