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]; }]; }