在我自己的问题上给我的答案理解 GCD 块内 [NSData dataWithContentsOfURL:URL] 的行为确实是有道理的。所以请确保如果你[NSData dataWithContentsOfURL:URL]
在 GCD 内使用(就像现在许多开发人员所做的那样)不是一个好主意下载文件/图像。所以我倾向于下面的方法(你可以使用NSOperationQueue
)。
使用加载图像[NSURLConnection sendAsynchronousRequest:queue:completionHandler:
然后使用 NSCache 来防止一次又一次地下载相同的图像。
正如许多开发人员建议的那样,使用SDWebimage并且它确实包含上述下载图像文件的策略。您可以加载任意数量的图像,并且根据代码作者,不会多次下载相同的 URL
编辑:
示例[NSURLConnection sendAsynchronousRequest:queue:completionHandler:
NSURL *url = [NSURL URLWithString:@"your_URL"];
NSURLRequest *myUrlRequest = [NSURLRequest requestWithURL:url];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:myUrlRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
{
if ([data length] > 0 && error == nil)
//doSomething With The data
else if (error != nil && error.code == ERROR_CODE_TIMEOUT)
//time out error
else if (error != nil)
//download error
}];