gpt4 book ai didi

ios - 加载远程图像的最佳方式是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:23:48 24 4
gpt4 key购买 nike

我一直在研究并且没有找到这个问题的任何答案 - sendAsynchronousRequest 与 dataWithContentsOfURL。

哪个更有效率?更优雅?更安全?等

- (void)loadImageForURLString:(NSString *)imageUrl
{
self.image = nil;

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
NSURLRequest * request = [NSURLRequest requestWithURL:[NSURL URLWithString:imageUrl]];
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse * response, NSData * data, NSError * connectionError)
{
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
if (data) {
self.image = [UIImage imageWithData:data];
}
}];
}

- (void)loadRemoteImage
{
self.image = nil;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
NSData * imageData = [NSData dataWithContentsOfURL:self.URL];
if (imageData)
self.image = [UIImage imageWithData:imageData];

dispatch_async(dispatch_get_main_queue(), ^{
if (self.image) {
[self setupImageView];
}
});
});
}

最佳答案

所以我为自己的问题想出了一个答案:
目前异步加载图片主要有3种方式。

  1. NSURLConnection
  2. GCD
  3. NSOperationQueue

对于每个问题,选择最好的方法都是不同的。
例如,在 UITableViewController 中,我会使用第三个选项 (NSOperationQueue) 为每个单元格加载图像,并确保单元格在分配图片之前仍然可见。如果单元格不再可见,则应取消该操作,如果 VC 从堆栈中弹出,则应取消整个队列。

当使用 NSURLConnection + GCD 时,我们没有取消选项,因此应该在不需要时使用它(例如,加载常量背景图像)。

另一个好的建议是将该图像存储在缓存中,即使它不再显示,并在启动另一个加载过程之前在缓存中查找它。

关于ios - 加载远程图像的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13082194/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com