与GCD同时排队? (iOS 4.2.1)

Iam有问题:

dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0UL); 

concurrentQueue在iOS 4.2.1(设备)上是nil ,但是相同的代码在运行iOS 5.0.1的另一个设备上完美工作。

当我检查标题说它从iOS 4.0可用,我做错了什么?

下面的代码从互联网上获取图像,并且在4.2.1之后的所有内容都很好,但是在4.2.1之后,任何想法是为什么呢? 你能用GCD创build一个并发队列吗?

 - (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]; }); } }); }); } 

看来DISPATCH_QUEUE_PRIORITY_BACKGROUND仅适用于iOS 5.0及更高版本。

DISPATCH_QUEUE_PRIORITY_BACKGROUND调度到队列中的项目以后台优先级运行; 在排定了所有高优先级队列后,队列被调度执行,系统在优先级设置为后台状态的线程上运行项目。 这样的线程具有最低的优先级,任何磁盘I / O都会受到限制,以最大限度地减less对系统的影响。 在iOS 5.0及更高版本中可用。

在这里find

在用户运行iOS 4的情况下,您可以使用DISPATCH_QUEUE_PRIORITY_LOW ,然后在iOS 5及更高版本中使用DISPATCH_QUEUE_PRIORITY_BACKGROUND

编辑

如果在这种情况下没有仔细阅读,文档有点误导。

在这里输入图像说明