UITableView的性能优化
2014-01-06 11:15
274 查看
使用UITableViewController:
继承了UITableViewController的优点:
1在UITableViewController的内部,系统已经自动创建了一个tableView对象.
2并且自动设置以下的代码:
//设置控制器的view
self.view = tableView;
//设置控制器的tableView属性
self.tableView = self.view;
//设置tableView的数据源
self.tableView.dataSource = self;
//设置tableView的代理
self.tableView.delegate = self;
使用UITableViewController的缺点:
1不利于添加工具条.
2如果使用tableView的tableHeaderView属性添加工具条时,拖动时发现工具条也被拖走了.
性能问题:
1当表格中的单元格进入屏幕时,就会调用数据源的-tableView:cellForRowAtIndexPath:方法,在方法内部创建一个cell对象,系统得到对象后会自动对cell做一次retain操作.
2当表格中的单元格完全退出屏幕时,系统又会调用cell对象的release方法,将对象销毁.
3对象cell的创建和销毁,都是由于表格的滚动而发生的,当表格快速滚动时,在短时间内将创建和销毁大量的cell对象,系统将会很卡.
解决方案:
只创建可视屏幕个cell对象,并对这些对象进行重用.
cell重用代码:
//static可以让ID只初始化一次
static NSString *ID = @"MyCell";
//先到缓存池里查找,看有没有可循环利用的cell
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
//如果没有,就自己创建一个新的cell
if(cell == nil)
{
cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID]autorelease];
}
//覆盖原来的数据
cell.textLabel.text = self.mydata[indexPath.row];
...
//覆盖原来的状态(比如是否打勾)
...
return cell;
使用UITableViewController:
继承了UITableViewController的优点:
1在UITableViewController的内部,系统已经自动创建了一个tableView对象.
2并且自动设置以下的代码:
//设置控制器的view
self.view = tableView;
//设置控制器的tableView属性
self.tableView = self.view;
//设置tableView的数据源
self.tableView.dataSource = self;
//设置tableView的代理
self.tableView.delegate = self;
使用UITableViewController的缺点:
1不利于添加工具条.
2如果使用tableView的tableHeaderView属性添加工具条时,拖动时发现工具条也被拖走了.
性能问题:
1当表格中的单元格进入屏幕时,就会调用数据源的-tableView:cellForRowAtIndexPath:方法,在方法内部创建一个cell对象,系统得到对象后会自动对cell做一次retain操作.
2当表格中的单元格完全退出屏幕时,系统又会调用cell对象的release方法,将对象销毁.
3对象cell的创建和销毁,都是由于表格的滚动而发生的,当表格快速滚动时,在短时间内将创建和销毁大量的cell对象,系统将会很卡.
解决方案:
只创建可视屏幕个cell对象,并对这些对象进行重用.
cell重用代码:
//static可以让ID只初始化一次
static NSString *ID = @"MyCell";
//先到缓存池里查找,看有没有可循环利用的cell
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
//如果没有,就自己创建一个新的cell
if(cell == nil)
{
cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID]autorelease];
}
//覆盖原来的数据
cell.textLabel.text = self.mydata[indexPath.row];
...
//覆盖原来的状态(比如是否打勾)
...
return cell;
相关文章推荐
- 关于UITableView的性能优化
- UITableView的性能优化10个小技巧
- UITableView 性能优化笔记
- 优化UITableView性能
- iOS 之 UITableView 使用详解/性能优化/UITableViewCell/UITableViewController
- UITableView创建Cell时的性能优化(cell的重用机制)
- 详细整理iOS中UITableView的性能优化
- 性能优化-UITableView的优化使用
- iOS UITableView性能优化 —— HERO博客
- IOS UITableView详解三性能优化 Cell重用
- UITableView简单性能优化
- UITableView性能优化---自动计算cell高度(FDTemplateLayoutCell)
- ios开发笔记(三)—— UITableView的性能优化
- ios UITableView性能优化
- ios-day06-02(UITableView常见属性、UITableViewCell的常见属性、性能优化等)
- UI 一一 UITableView的使用和性能优化
- iOS UITableView性能优化1
- 优化UITableView性能
- UITableView的性能优化? 滑动的时候有种卡的感觉是为什么?怎么解决?
- UITableview性能优化总结