如何asynchronous加载dynamicUITableView图像?

现在我有一个图像和标签的自定义单元格。 后来我打印这些细胞:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell:customCell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! customCell var url = NSURL(string: postCover[indexPath.row]) if let data = NSData(contentsOfURL: url!) { cell.cellImage.image = UIImage(data: data) } var title = postTitle[indexPath.row] cell.cellLabel.text = title let indexPath = tableView.indexPathForSelectedRow() return cell } 

当我打开一个应用程序,并滚动它冻结。 我该如何解决这个错误?

我读了一下,我必须在我的tableView中使用asynchronous图像加载,但我不加载它们asynchronous已经?

我search了4-5天,一无所有。 任何人都可以给我一些提示,请吗?

您可以使用GCD将每个单元格asynchronous下载图像,

 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell:customCell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! customCell var url = NSURL(string: postCover[indexPath.row]) cell.imageView.image = nil; dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul); dispatch_async(queue, ^(void) { NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:parsedData[@"imageLR"]]; UIImage* image = [[UIImage alloc] initWithData:imageData]; if (image) { dispatch_async(dispatch_get_main_queue(), ^{ if (cell.tag == indexPath.row) { cell.imageView.image = image; [cell setNeedsLayout]; } }); } }); return cell } 

对于Swift你可以这样做

 if let data = self.cache.objectForKey(urlString) as? NSData { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)) { let image = UIImage(data: data) dispatch_async(dispatch_get_main_queue()) { cell.imageView.image = image; } } 

你可以在gitHub上使用第三部分Library SDWebImage。 它基于Objective-C,另有基于Swift的图书馆翠鸟 。 也许这就是你想要的。

在swift中创build一个桥接头。导入AFNetworking头文件

然后find这些方法setImageWithURLRequest

cell.imageView.setImageWithURLRequest可以用这种方式调用