iOS多圖片下載、在cell裡面下載圖片、做了緩存優化。
(app.icon是圖片地址)
// 先從內存緩存中取出圖片
UIImage *image = self.images[app.icon];
if (image) { // 內存中有圖片
cell.imageView.image = image;
} else { // 內存中沒有圖片
// 獲得Library/Caches文件夾
NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
// 獲得文件名
NSString *filename = [app.icon lastPathComponent];
// 計算出文件的全路徑
NSString *file = [cachesPath stringByAppendingPathComponent:filename];
// 加載沙盒的文件數據
NSData *data = [NSData dataWithContentsOfFile:file];
if (data) { // 直接利用沙盒中圖片
UIImage *image = [UIImage imageWithData:data];
cell.imageView.image = image;
// 存到字典中
self.images[app.icon] = image;
} else { // 下載圖片
[self.queue addOperationWithBlock:^{
// 下載圖片、多線程
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:app.icon]];
UIImage *image = [UIImage imageWithData:data];
[NSThread sleepForTimeInterval:1.0];
// 回到主線程顯示圖片
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
cell.imageView.image = image;
}];
// 存到字典中
self.images[app.icon] = image;
// 將圖片文件數據寫入沙盒中
[data writeToFile:file atomically:YES];
}];
}