tutorial - Cola concurrente con GCD?(iOS 4.2.1)
nsoperationqueue swift 3 example (1)
Tengo problemas con:
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 ejecuta 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é alguna idea? ¿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];
});
}
});
});
}
Parece que DISPATCH_QUEUE_PRIORITY_BACKGROUND
solo está disponible para iOS 5.0 y versiones posteriores.
DISPATCH_QUEUE_PRIORITY_BACKGROUND Los elementos enviados a la cola se ejecutan con prioridad de fondo; la cola está programada para su ejecución después de que se hayan programado todas las colas de alta prioridad y el sistema ejecuta elementos en una secuencia cuya prioridad se establece para el estado de fondo. Tal subproceso tiene la prioridad más baja y cualquier E / S de disco se acelera para minimizar el impacto en el sistema. Disponible en iOS 5.0 y posterior.
En el caso de que el usuario ejecute iOS 4, puede ir con DISPATCH_QUEUE_PRIORITY_LOW
y luego usar DISPATCH_QUEUE_PRIORITY_BACKGROUND
para iOS 5 y posterior.
Editar
La documentación es un poco engañosa si no la lee detenidamente en este caso.