我有一个表格视图,而不是用RSS源中的项目填充。选择行时,标题,链接,描述和图像将传递到详细视图。这有效但在选择行和打开详细视图之间存在明显的延迟。我正试图找到一种优化方法,以便延迟不太明显。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
GRSItemDetail *detail = [[GRSItemDetail alloc]initWithNibName:@"GRSItemDetail" bundle:nil];
RSSItem *entry = [[channel items]objectAtIndex:[indexPath row]];
NSURL *imageLink = [NSURL URLWithString:[entry bigImageURL]];
NSData *data = [NSData dataWithContentsOfURL:imageLink];
UIImage *image = [[UIImage alloc]initWithData:data];
detail.titleString = [entry title];
detail.descriptionString = [entry infoString];
detail.urlString = [entry link];
detail.itemImage = image;
[self.navigationController pushViewController:detail animated:YES];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
答案 0 :(得分:4)
延迟是由您使用NSData *data = [NSData dataWithContentsOfURL:imageLink];
引起的。这是同步从Web下载数据并在发生这种情况时阻止主线程。
您应该让详细视图控制器在显示后处理异步下载。考虑使用像SDWebImage这样的库来简化这一过程。要启用此功能,请更改detail.itemImage
以设置图像网址而不是图像本身,然后在配置详细信息视图时加载图像。