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