您的位置:首页 > 其它

异步加载图片等数据

2013-04-09 14:24 369 查看
大致思路为两步:(1) 加载tableView时读取图片缓存,如果存在则显示,如果不存在则异步下载;(2) 下载图片信息成功,更新图片缓存,重新加载tableView的数据

示例代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

/* 其他代码 */

// 用户头像

UIImage *userPic = [self cachedImageForUrl:[NSURL URLWithString:url]];

cell.userPicView.image = userPic;

/* 其他代码 */

}

- (UIImage *)cachedImageForUrl:(NSURL *)url {

id cachedObject = [self.cachedImage objectForKey:url];

if (cachedObject == nil) {

//防止reloadData时重复提交请求,添加占位符

[self.cachedImage setObject:@"Loading..." forKey:url];

//异步下载图片

ASIHTTPRequest *picRequest = [ASIHTTPRequest requestWithURL:url];

picRequest.delegate = self;

picRequest.didFinishSelector = @selector(didFinishRequestImage:);

picRequest.didFailSelector = @selector(didFailRequestImage:);

[self.queue addOperation:picRequest];

// 更新状态栏的网络标示

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

}else if ( ![cachedObject isKindOfClass:[UIImage class]] ) {

cachedObject = nil;

}

return cachedObject;

}

- (void)didFinishRequestImage:(ASIHTTPRequest *)request {

NSData *imageData = [request responseData];

UIImage *image = [UIImage imageWithData:imageData];

if (image != nil) {

[self.cachedImage setObject:image forKey:request.url];

[self.tableView reloadData];

}

[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

}

- (void)didFailRequestImage:(ASIHTTPRequest *)request {

NSLog(@"Error Download Image: %@", request.error);

[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐