【iOS】UITableView相关

UITableView是UIKit中最重要的一个组件之一,可以用来展示数据列表,也可以用来做页面布局和开发专用组件。UITableView的使用遵循MVC模式,从而实现数据模型、视图、控制器分离。UITableView继承自UIScrollView,可上下滑动,可以作为根视图,也可以作为子视图。与UITableView相关的概念有很多:UITableViewController、UITableViewDelegate、UITableViewDataSource、UITableViewCell等等,下面是一些简单的介绍。

UITableViewController继承自UIViewController并遵循UITableViewDelegate和UITableViewDataSource两个协议。

UITableViewDelegate遵循UIScrollViewDelegate和NSObject,提供一系列方法来自定义tableView的样式。

UITableViewDataSource遵循NSObject,提供一系列方法来填充tableView的数据。

UITableViewCell的复用原理

在UITableViewController中创建UITableViewCell时常用到如下方法:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:<#@"reuseIdentifier"#> forIndexPath:indexPath];

其中的@“reuseIdentifier”就是一个复用标识符,是一个独一无二的字符串,用来唯一标示某种重复样式的UITableViewCell,提高加载效率。系统在创建足够多的Cell后(覆盖整个tableView),保存并重复这些Cell,避免重复创建和销毁Cell。UITableView中有两个数组用来实现这一机制:visiableCells和reuseableTableCells。前者用来保存当前屏幕可见的Cell,后者用来保存那些可以复用的Cell。

一个tableView是否可以关联两个datasource

可以。可以直接将多个数据源合并为一个数据源,也可以分别关联。

如何对UITableView的滚动加载进行优化

对UITableView的滚动优化主要在以下两个方面

减少cellForRowAtIndexPath中的计算量(cell的内容计算):

1、提前计算每个cell中用到的基本数据,调用时直接取出

2、异步加载图片,之后再填入cell内部的UIImageView

3、图片数量多时,图片的尺寸需要经过transform矩阵变化压缩好,或者只加载预览图。

4、图片懒加载,避免滚动速度过快时频繁请求数据

5、尽量手动Drawing视图而不是直接使用UITableViewCell的子类。

减少heightForRowAtIndexPath的计算量(cell的高度计算):

1、如果cell高度固定,可以去掉HeightForRowAtIndex代理,直接设置tableView的rowHeight属性作为固定高度

2、如果高度不固定,可以将cell的高度提前计算好存储起来,代理调用时直接取。

你可能感兴趣的:(【iOS】UITableView相关)