Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 异步下载图像_Ios_Objective C_Asynchronous - Fatal编程技术网

Ios 异步下载图像

Ios 异步下载图像,ios,objective-c,asynchronous,Ios,Objective C,Asynchronous,我正在使用以下代码下载图像。是否有人可以确认图像正在异步下载,就像它们看起来一样?通常情况下,他们下载速度很快,但当数据通过时,用户界面会不时冻结一分钟,因此出现问题: #define kBgQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) //1 NSString *picURL = [NSString stringWithFormat:@"http://~/pics/%@",picname];

我正在使用以下代码下载图像。是否有人可以确认图像正在异步下载,就像它们看起来一样?通常情况下,他们下载速度很快,但当数据通过时,用户界面会不时冻结一分钟,因此出现问题:

#define kBgQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) //1

  NSString *picURL = [NSString stringWithFormat:@"http://~/pics/%@",picname];
    NSURL *urlPicUrl = [NSURL URLWithString:picURL];
    dispatch_async(kBgQueue, ^{ 
        NSData *imgData = [NSData dataWithContentsOfURL:[NSURL URLWithString:picURL]];
         if (imgData) { 
            UIImage *imageCache = [[UIImage alloc] init];
            imageCache = [UIImage imageWithData:imgData];
            if (imageCache) { 
                [self saveImage:imageCache asPicName:picname];
                dispatch_async(dispatch_get_main_queue(), ^{ 
                }); 
            } 
        } 
    }); 
编辑:

下面是保存图像的代码

- (void)saveImage: (UIImage*)image asPicName: (NSString*)picname
{
    if (image != nil)
    {
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                             NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
        NSString* path = [documentsDirectory stringByAppendingPathComponent:
                          [NSString stringWithString: picname] ];
        NSData* data = UIImagePNGRepresentation(image);
        [data writeToFile:path atomically:YES];
    }
}

可以发布“saveImage:”方法的代码吗?为什么要异步调用主队列?代码应该是dispatch\u sync(dispatch\u get\u main\u queue(),^{})@马克伯克为什么?OP在这方面所做的并没有错。当我登录imgData时,我看到冻结发生在下载过程中。除了您的问题之外,为每个图像获取(相同的)
文档
目录,而不是在
viewDidLoad
中获取一次并将其保存到变量中,是浪费时间和资源的。