在iOS中的UITableViewasynchronous图像加载的build议

我目前正在使用这个代码加载我的表左侧的缩略图,标题和副标题:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; } NSDictionary *post = [posts objectAtIndex:indexPath.row]; cell.textLabel.text = [post objectForKey:@"post_text"]; cell.detailTextLabel.text = [post objectForKey:@"post_author_name"]; NSString *postpictureUrl = [post objectForKey:@"picture"]; NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:postpictureUrl]]; cell.imageView.image = [UIImage imageWithData:data]; return cell; } 

当然,由于我在这里做的是同步加载,所以这在生产中是不行的。

在这样的情况下,你对asynchronous加载图像有什么build议?

我发现AFnetworking (还没有使用它),但不知道是否有一个更轻量级的方法来解决这个问题。

AsyncImageView是你的朋友, 在这里检查一下 。

只需设置imageURL ,你就可以走了。

 Use lazy loading in table view Use this code (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; } NSDictionary *post = [posts objectAtIndex:indexPath.row]; cell.textLabel.text = [post objectForKey:@"post_text"]; cell.detailTextLabel.text = [post objectForKey:@"post_author_name"]; dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul); dispatch_async(queue, ^{ //This is what you will load lazily NSString *postpictureUrl = [post objectForKey:@"picture"]; NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:postpictureUrl]]; dispatch_sync(dispatch_get_main_queue(), ^{ cell.imageView.image = [UIImage imageWithData:data]; [cell setNeedsLayout]; }); }); return cell; }