IOS 다 중 스 레 드 다 중 이미지 다운로드 실현(1)

본문 에 들 어가 기 전에 효과 도 를 보 여 드 리 겠 습 니 다.마음 에 드 시 면 전문 을 계속 읽 어 주세요.

여러분 은 이 화면 이 매우 간단 하 다 는 것 을 볼 수 있 습 니 다.사실은 UITableView 의 구조 입 니 다.그러나 어 려 운 점 은 인터넷 에서 이 그림 들 을 어떻게 다운로드 하고 다운로드 한 후에 어떻게 저장 해 야 하 는 지 입 니 다!
한 걸음 한 걸음 분석 합 니 다.먼저 단일 스 레 드(메 인 스 레 드)에서 여러 그림 을 다운로드 하여 레이아웃 에 있 는 텍스트 와 그림 의 주 소 를 plist 파일 에서 읽 습 니 다.

구조 에 따라 데이터 모델 파일 을 사용자 정의 합 니 다.
DDZApp.h

#import <Foundation/Foundation.h>
@interface DDZApp : NSObject
//  
@property (nonatomic,strong) NSString *icon;
//  
@property (nonatomic,strong) NSString *name;
//   
@property (nonatomic,strong) NSString *download;
+ (instancetype)appWithDict:(NSDictionary *)dict;
@end 
DDZApp.m

#import "DDZApp.h"
@implementation DDZApp
+ (instancetype)appWithDict:(NSDictionary *)dict {
DDZApp *app = [[self alloc] init];
[app setValuesForKeysWithDictionary:dict];
return app;
}
@end 
아래 는 모두 보기 컨트롤 러 의 코드 입 니 다.
ViewController.m
1.

@interface ViewController ()
//    
@property (nonatomic,strong)NSArray *apps;
//      
@property (nonatomic,strong)NSMutableDictionary *imgCache;
@end 
첫 번 째 속성 은 plist 파일 의 내용 을 읽 는 데 사 용 됩 니 다.속성 으로 저장 하면 중복 읽 지 않 아 도 됩 니 다.
두 번 째 속성 은 인터넷 에서 다운로드 한 그림 을 저장 하 는 데 사용 되 며,중복 읽 지 않 아 도 된다.
2.

@implementation ViewController
//    
- (NSArray *)apps {
if (!_apps) {
// plist       
NSArray *dictArray = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"apps.plist" ofType:nil]];
NSMutableArray *appArray = [NSMutableArray array];
for (NSDictionary *dict in dictArray) {
[appArray addObject:[DDZApp appWithDict:dict]];
}
_apps = appArray;
}
return _apps;
}
//    
- (NSMutableDictionary *)imgCache {
if (!_imgCache) {
//   
_imgCache = [NSMutableDictionary dictionary];
}
return _imgCache;
}
이 두 가지 방법 은 모두 아까 의 두 속성 을 초기 화하 기 위 한 것 이다.
3.

#pragma mark -      
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.apps.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *ID = @"app";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
DDZApp *app = self.apps[indexPath.row];
cell.textLabel.text = app.name;
cell.detailTextLabel.text = app.download;
//         
UIImage *image = self.imgCache[app.icon];
if (image) {
cell.imageView.image = image;
}else {
//       
//             
NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
//     
NSString *filename = [app.icon lastPathComponent];
//         
NSString *file = [cachesPath stringByAppendingPathComponent:filename];
//         
NSData *data = [NSData dataWithContentsOfFile:file];
//          
if (data) {
//         
cell.imageView.image = [UIImage imageWithData:data];
//    (  ) 
self.imgCache[app.icon] = cell.imageView.image;
}else {
//    
data = [NSData dataWithContentsOfURL:[NSURL URLWithString:app.icon]];
cell.imageView.image = [UIImage imageWithData:data];
//     
self.imgCache[app.icon] = cell.imageView.image;
//           
[data writeToFile:file atomically:YES];
}
}
return cell;
}
이 두 가지 방법 은 UITableView 가 반드시 실현 해 야 하 는 방법 입 니 다.
첫 번 째 는 데 이 터 량 을 되 돌려 주 는 것 이 라 할 말 이 없다.
두 번 째 는 바 인 딩 데이터 입 니 다.
구체 적 인 절 차 는 다음 그림 을 보십시오.

이상 의 내용 은 IOS 다 중 스 레 드 에 대해 다 중 이미지 다운로드(1)를 실현 하 는 것 과 관련 된 소 개 를 하고 여러분 에 게 도움 이 되 기 를 바 랍 니 다.다음 글 은 계속 소개 해 드 리 겠 습 니 다IOS 다 중 스 레 드 다 중 이미지 다운로드 실현(2)관심 있 는 분 들 은 지속 적 으로 관심 을 가 져 주 십시오.

좋은 웹페이지 즐겨찾기