zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

iOS多图片下载

ios
2023-09-11 14:18:58 时间
 1 iOS多图片下载、在cell里面下载图片、做了缓存优化。
 2 
 3 (app.icon是图片地址)
 4 
 5 // 先从内存缓存中取出图片
 6     UIImage *image = self.images[app.icon];
 7     if (image) { // 内存中有图片
 8         cell.imageView.image = image;
 9     } else {  // 内存中没有图片
10         // 获得Library/Caches文件夹
11         NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
12         // 获得文件名
13         NSString *filename = [app.icon lastPathComponent];
14         // 计算出文件的全路径
15         NSString *file = [cachesPath stringByAppendingPathComponent:filename];
16         // 加载沙盒的文件数据
17         NSData *data = [NSData dataWithContentsOfFile:file];
18         
19         if (data) { // 直接利用沙盒中图片
20             UIImage *image = [UIImage imageWithData:data];
21             cell.imageView.image = image;
22             // 存到字典中
23             self.images[app.icon] = image;
24         } else { // 下载图片
25             [self.queue addOperationWithBlock:^{
26                 // 下载图片、多线程
27                 NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:app.icon]];
28                 UIImage *image = [UIImage imageWithData:data];
29                 
30                 [NSThread sleepForTimeInterval:1.0];
31                 
32                 // 回到主线程显示图片
33                 [[NSOperationQueue mainQueue] addOperationWithBlock:^{
34                     cell.imageView.image = image;
35                 }];
36                 
37                 // 存到字典中
38                 self.images[app.icon] = image;
39                 // 将图片文件数据写入沙盒中
40                 [data writeToFile:file atomically:YES];
41             }];
42      }