dispatch_queue_t concurrentQueue = dispatch_get_global_queue(disPATCH_QUEUE_PRIORITY_BACKGROUND,0UL);
在iOS 4.2.1(设备)上的concurrentQueue为零,但是在运行iOS 5.0.1的另一台设备上,相同的代码可以完美工作.
当我检查标题时,它表示从iOS 4.0起可用,我做错了什么?
下面的代码从互联网中获取图像,在4.2.1之后的所有内容中都能很好的工作,但是没有在4.2.1中,任何想法为什么?您可以使用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];
                });
            }           
        });
    }); 
}
解决方法
disPATCH_QUEUE_PRIORITY_BACKGROUND
Items dispatched to the queue run at background priority; the queue is scheduled for execution after all high priority queues have been scheduled and the system runs items on a thread whose priority is set for background status. Such a thread has the lowest priority and any disk I/O is throttled to minimize the impact on the system.
Available in iOS 5.0 and later.
Found here
在用户运行iOS 4的情况下,您可以使用disPATCH_QUEUE_PRIORITY_LOW,然后在iOS 5及更高版本中使用disPATCH_QUEUE_PRIORITY_BACKGROUND.
编辑
如果您在这种情况下不仔细阅读,文档有点误导.