Ios UIImageView加载图像的速度非常慢

Ios UIImageView加载图像的速度非常慢,ios,objective-c,xcode,uiimageview,nsurlsession,Ios,Objective C,Xcode,Uiimageview,Nsurlsession,我有一些代码可以从网页中获取图像并将其显示在ImageView中。但由于某种原因,图像加载非常慢,我真的不明白!通过我的日志记录,我可以看到图像的所有数据(base64字符串)都很快到达,但是图像显示在ImageView中大约需要12-15秒 我觉得这很奇怪,因为我使用NSStream以不同的方法获取图像的数据,并在所有数据到达后立即加载图像。但是,使用这种URLSession方法加载映像需要更长的时间。这真的没有道理!此方法不应影响ImageView加载该数据的方式 有人知道为什么会这样吗 代

我有一些代码可以从网页中获取图像并将其显示在ImageView中。但由于某种原因,图像加载非常慢,我真的不明白!通过我的日志记录,我可以看到图像的所有数据(base64字符串)都很快到达,但是图像显示在ImageView中大约需要12-15秒

我觉得这很奇怪,因为我使用NSStream以不同的方法获取图像的数据,并在所有数据到达后立即加载图像。但是,使用这种URLSession方法加载映像需要更长的时间。这真的没有道理!此方法不应影响ImageView加载该数据的方式

有人知道为什么会这样吗

代码如下:

- (void)postMethod:(NSDictionary *)numDict
{
NSURL *url = [NSURL URLWithString:@"http://theWebAddress.com/aPage.php"]; // add url to page
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:config];

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
request.HTTPMethod = @"POST";


NSError *error = nil;
NSData *data = [NSJSONSerialization dataWithJSONObject:numDict options:kNilOptions error:&error];

NSLog(@"%@", numDict);

if (!error)
{
    NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest:request fromData:data completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

        NSDictionary *diction = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];


        for (id key in diction)
        {
            if ([key isEqualToString:@"text"])
            {
                NSLog(@"data is text");

                self.messageLabel.text = diction[@"text"];

                break;
            }
            else if ([key isEqualToString:@"image"])
            {
                NSLog(@"data is an image");

                // gets the base64 string pretty instantly but takes 12 - 15 seconds to pop up in the imageView

                NSData *ImgData = [[NSData alloc] init];
                ImgData = [[NSData alloc] initWithBase64EncodedString:diction[@"image"] options:1];

                self.ImageView.image = [UIImage imageWithData:ImgData];

                break;
            }
        }

    }];

    [uploadTask resume];
}
}

非常感谢

您首先下载图像,然后显示图像。您可以使用延迟加载下载图像

为此,您可以使用EgoImageView而不是uiimageview

self.ImageView.imageURL=[NSURL URLWithString:

这里self.ImageView是egoimageview类型

您可以从github获得这个类


您可以尝试使用SDWebImage,只需在imageView中设置图像,如下所示:

[cell.imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
               placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

您的完成处理程序可能正在后台线程上运行。UI更新应始终在主线程上运行。请在

self.ImageView.image = [UIImage imageWithData:ImgData]; 
并查看它是否在主线程上。如果不在主线程上,请在设置ImageView.image之前将其分派到主线程:

dispatch_async(dispatch_get_main_queue(), ^{
    self.ImageView.image = [UIImage imageWithData:ImgData];
});

为什么要使用上载任务?因为我正在将一些数据发布到网页上,然后该网页会根据这些数据输出文本或图像。工作非常顺利!尽管您的代码在第一个{'dispatch\u async(dispatch\u get\u main\u queue(),^{code}前面缺少一个^)非常感谢!是的,谢谢你的留言。用SO而不是xcode写了一个快速的答案,所以我没听懂。