繁体   English   中英

GCD的并发队列? (iOS 4.2.1)

[英]Concurrent Queue with GCD? (iOS 4.2.1)

我遇到问题:

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以其他方式创建并发队列吗?

- (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都受到限制,以最小化对系统的影响。 适用于iOS 5.0及更高版本。

在这里找到

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

编辑

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

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM