TableView滚动缓慢

问题描述:

NSData *imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:[getImage objectAtIndex:indexPath.row]]]; 
cell.imageView.image = [UIImage imageWithData:imageData]; 

我从服务器提取图像并在UITableView上显示它们。我发现滚动非常缓慢。我如何删除它?TableView滚动缓慢

+0

[如何在每个单元格中加载图像时如何提高表视图中滚动的速度?](http://stackoverflow.com/questions/823475/how-to-increase-the-当图像正在显示时,在图像上滚动的速度) – Fogmeister 2014-10-16 14:23:08

当调用此代码:

[[NSData alloc] initWithContentsOfURL:...] 

这是伸手在网络上获取数据。这可能需要几秒钟(或更长时间),而您希望保持每秒60帧的绘图。这意味着您的tableView:cellForRowAtIndexPath:方法应该在1/60秒或16毫秒内执行,因此网络呼叫是不可能的。

编写此代码的适当方式是异步加载数据(使用Grand Central Dispatch或其他机制),将其缓存在磁盘上或使用NSCache,然后通知表视图它应该重新加载以显示新的可用数据。

+0

如何使用GCD提高速度。 – 2014-10-17 05:15:29

+0

迈克阿什的文章介绍大中央调度是一个很好的起点。如果您对如何使用它有任何疑问,您应该提出一个新问题。 https://www.mikeash.com/pyblog/friday-qa-2009-08-28-intro-to-grand-central-dispatch-part-i-basics-and-dispatch-queues.html – wjl 2014-10-17 16:11:35

即使对于最近显示的单元格,该数据源方法也会被频繁调用,因为iOS希望减少tableview中的单元总数,因此它会销毁不再可见的单元格,并要求重新创建tablview数据源方法当他们变得可见时。

如果您从服务器获取每个细胞群的电话,那么它肯定会很慢(轻描淡写)。

实施一些缓存并从缓存中填充您的内容。