1>我是否需要先在主线程上填充表格视图,然后在主线程填充的背景中填充图像,或者是否有其他解决方案可以解决上述过程?
所有 UI 更改都必须在主线程上完成。但是图像的下载(以及任何处理,比如如果你想绕过角落)应该在后台线程上完成。
2> 如果加载图像需要时间并且有人已经从 tableview 中删除了 msg,我如何将它准确加载到 msg 的位置。tableview 是否知道该特定单元格中的对象已被删除,因此该图像是在后台加载被省略并继续。或者我是否需要将整个线程保留在主线程上,直到消息和图像都被加载?
表格视图反映了数据源中的任何内容。除了表格单元格之外,它不会为您跟踪任何内容。如果用户删除了一条消息并且图像尚未下载,您应该取消该图像的下载。
对于图像下载,您可能需要查看SDWebImage库,它会为您完成很多工作。它启用了“setImageWithURL”方法,您可以像这样使用它:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *MyIdentifier = @"MyIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:MyIdentifier] autorelease];
}
// Here we use the new provided setImageWithURL: method to load the web image
[cell.imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
cell.textLabel.text = @"My Text";
return cell;
}