如果UITableViewCell中需要加载图片或者其他需要耗时才能够获取的内容,则下面的方法可以提升性能,否则下面方法是没有意义的。
我们知道UITableView在滚动时松手以后,还会继续减速滚动一段时间到停止。我们能够提升性能的关键点就在于减速滚动的这段时间。
在拖动时由于用户可能会一直在查看内容,所以必须加载所有内容,但是滚动过程中得cell,由于用户根本无法看到全部内容,我们可以把一些耗时的内容不进行加载,这样就可以大大提升UITableView的滚动性能。
UITableViewDelegate
是 UITableView
的 delegate protocol,UITableView
的功能都是通过它的 delegate 方法实现的。了解这些方法被触发的条件及调用的顺序对于使用 UIScrollView
是很有必要的,其中拖动相关的 delegate 方法按调用顺序(不含didScroll)是这样的:
scrollViewWillBeginDragging:
scrollViewWillEndDragging: withVelocity: targetContentOffset:
scrollViewDidEndDragging: willDecelerate:
scrollViewWillBeginDecelerating:
scrollViewWillBeginDragging:
scrollViewWillEndDragging: withVelocity: targetContentOffset:
scrollViewDidEndDragging: willDecelerate:
scrollViewWillBeginDecelerating:
...
scrollViewWillBeginDragging:
scrollViewWillEndDragging: withVelocity: targetContentOffset:
scrollViewDidEndDragging: willDecelerate:
scrollViewWillBeginDecelerating:
scrollViewDidEndDecelerating:
从上面的执行顺序可以看出, scrollViewWillBeginDecelerating之后,可能执行scrollViewDidEndDecelerating,但是也可能执行scrollViewWillBeginDragging。如果是前一种情况,减速滑动直到停止,自然无需多说,如果是后一种情况,就会出现tableView的属性decelerating和dragging同时为true,需要注意具体使用情况。
我们先说提升性能的问题,首先在beginDraging到endDragging的时间段内,是必须加载所有内容的,因为用户一直在用手拖动列表,一旦缺少内容,就会影响展示效果;然后就是beginDecelerating到endDecelerating/beginDragging这段时间,由于这段时间是