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