ios - UIImageView 加载图片很慢

标签 ios objective-c xcode uiimageview nsurlsession

我有一些代码可以从网页获取图像并将其显示在 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];
}
}

非常感谢!

最佳答案

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

处设置一个断点
self.ImageView.image = [UIImage imageWithData:ImgData]; 

看看是不是在主线程上。如果没有,请在设置 ImageView.image 之前将其分派(dispatch)到主线程:

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

关于ios - UIImageView 加载图片很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25922935/

相关文章:

ios - 为什么数组没有显示在 TableView 中?

ios - 无法在 startWithCompletionHandler 之外检索数据

ios - documents目录下的Core Data sqlite数据库是iCloud自动备份的吗?

Xcode 卡在 "Installing components..."

ios - 为什么 pickerView 不在 tableView 单元格内的文本字段中输入文本?

ios - 如何在 iOS 上获得最准确的用户速度

ios - list 验证但应用程序打开时显示空白屏幕?

objective-c - 过滤 flickr 图片

ios - Paypal SDK 集成错误

ios - 架构 arm64 的重复符号