您的位置:首页 > 产品设计 > UI/UE

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: