基本介绍缓存
UITableView在 iOS 开发中能够说是使用最普遍的控件,它有两种风格:UITableViewStylePlain和UITableViewStyleGrouped。这二者操做起来其实并无本质区别,只是后者按分组样式显示前者按照普通样式显示而已。性能优化
在UITableView中数据只有行的概念,并无列的概念,每行数据都是一个UITableViewCell,其内部有一个UIView控件(contentView,做为其余元素的父控件)、两个UILable控件(textLabel、detailTextLabel)、一个UIImage控件(imageView),分别用于容器、显示内容、详情和图片。性能
UITableViewCell提供有四种样式,分别为优化
UITableViewCellStyleDefault
左侧显示textLabel(不显示detailTextLabel),imageView可选(显示在最左边)spa
UITableViewCellStyleValue1代理
左侧显示textLabel、右侧显示detailTextLabel(默认蓝色),imageView可选(显示在最左边)blog
UITableViewCellStyleValue2排序
左侧依次显示textLabel(默认蓝色)和detailTextLabel,imageView可选(显示在最左边)索引
UITableViewCellStyleSubtitle事件
左上方显示textLabel,左下方显示detailTextLabel(默认灰色),imageView可选(显示在最左边)
UITableView须要实现UITableViewDataSource和UITableViewDelegate 协议,来实现和外界数据和操做的交互。
数据源
UITableViewDataSource共有三类方法:
(1)配置表视图
这类方法用来计算 section 和 cell 的数量、section 索引等,以及设置表视图中的 cell视图、header/footer 的标题。
根据数据源方法生成单元格的顺序是:计算分组数——计算每组行数——生成分组索引——生成单元格
生成单元格的方法并非一次所有调用,而是只会生产当前显示在界面上的单元格,当用户滚动操做时再显示其余单元格
(2)插入或修改行
设置是否能够编辑指定的行,以及设置相应行的编辑样式。
(3)从新排序
设置可否移动指定的行,以及肯定将要移动到的位置。
代理
UITableViewDelegate共有九类方法:
(1)设置表视图的行
包括设置行高、预计的行高、行缩进,以及在即将显示行前要进行的绘制工做。
(2)管理Accessory Views
包括设置editActions(表格行侧滑能够执行的操做)、accessoryButton点击事件的处理。
(3)管理表格行的选择
包括willSelect(将要选中)、didSelect(已经选中)、willDeselect(将要放弃选中)、didDeslect(放弃选中)四种状态,能够设置在选择的不一样状态,进行不一样的操做。
(4)修改 section 的 header 和 footer
包括设置 header 和 footer 的高度、预计高度、视图,以及将要显示时执行的操做。
(5)编辑表视图的行
包括willBeginEditing(将要开始编辑)和 didEndEditing(结束编辑)两种状态,以及设置行的编辑样式、删除确认按钮的标题、在编辑时是否缩进。
(6)排序
这个方法和数据源方法中的那个的不一样之处在于:它返回的是目标位置的 indexPath
(7)追踪视图的移除
包括设置结束 cell、header 和 footer 显示后执行的操做三种。
(8)行内容的复制粘贴
包括是否显示编辑菜单(默认不显示)、是否执行动做和实行哪一种操做三种。
(9)行的高亮显示
包括shouldHighlight、didHighlight和didUnhighlight三种。
(10)focus
包括可否突出显示某行、应该更新突出显示、已更新显示某行、突出显示的行的 indexPath 四种。
性能优化
在UITableView内部有一个缓存池,初始化时使用initWithStyle:(UITableViewCellStyle) reuseIdentifier:(NSString *)方法指定一个可重用标识,就能够将这个cell放到缓存池。而后在使用时使用指定的标识去缓存池中取得对应的cell而后修改cell内容便可。
UITableViewCell
UITableViewCell是构建一个UITableView的基础,在UITableViewCell内部有一个UIView控件做为其余内容的容器,它上面有一个UIImageView和两个UILabel,经过UITableViewCellStyle属性能够对其样式进行控制。其结构以下:
有时候咱们会发现不少UITableViewCell右侧能够显示不一样的图标,在iOS中称之为访问器,点击能够触发不一样的事件,例如设置功能: