最近没有来写,一是没想好写什么;二是因为赶项目。今天有个同事突然问到UITableView有哪些可以优化的地方。首先想到UITableView的懒加载,想来这个可以写一下。
因为我们经常会用UITableView和UICollectionView来实现图文列表的方式来展示。那么随着加载的数据和滑动的频率,这个时候就需要考虑到性能问题了,随着现在的硬件性能越来越好,有时候测试时可能出现不了卡顿的情况,但是并不代表你的代码没问题。首先滑动的频率很快的时候,数据不停的加载,图片通过多线程来实现异步加载,那么这里的开销是会很大的。如何减少这种开销呢?懒加载,意味着我只需要显示当前滑动停止时当屏的数据即可,快速滑动过去的数据我可以不用加载图片。
那么懒加载的核心关键就在于要明白UIScrollView的几个代理方法,这篇重点讲一下这几个代理方法和调用顺序:
//用于开始拖动的时候
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;
//contentOffset发生变化时会被调用
- (void)scrollViewDidScroll:(UIScrollView *)scrollView;
//用于将要结束拖动的时候,当你将要结束拖动的时候,系统已经计算好了targetContentOffset,此时系统已要计算出滑动结束后将会停在哪里。
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset;
//用于已经结束拖动的时候,decelerate 为 YES 时,结束拖动后会有减速过程。
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;
//减速动画开始前调用
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView; // called on finger up as we are moving
//减速动画结果时调用,可以用于判断滑动是否停止
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;
理解了上面UIScrollView的几个代理方法和调用顺序,我们下一篇开始讲如何实现UITableView的懒加载。