GCD的并发队列?(iOS 4.2.1)

Kon*_*d77 9 grand-central-dispatch ios4 ios

我遇到问题:

dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0UL);
Run Code Online (Sandbox Code Playgroud)

concurrentQueuenil在iOS 4.2.1(装置),但相同的代码完美地工作,其运行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];
                });
            }           
        });
    }); 
}
Run Code Online (Sandbox Code Playgroud)

Chr*_*ner 32

它似乎DISPATCH_QUEUE_PRIORITY_BACKGROUND仅适用于iOS 5.0及更高版本.

DISPATCH_QUEUE_PRIORITY_BACKGROUND调度到队列的项目以后台优先级运行; 在调度所有高优先级队列并且系统在优先级设置为后台状态的线程上运行项目之后,计划执行队列.这样的线程具有最低优先级,并且任何磁盘I/O都受到限制,以最小化对系统的影响.适用于iOS 5.0及更高版本.

在这里找到

在用户运行iOS 4的情况下,您可以DISPATCH_QUEUE_PRIORITY_LOW使用DISPATCH_QUEUE_PRIORITY_BACKGROUNDiOS 5及更高版本.

编辑

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

在此输入图像描述