UITableView性能优化及使用总结
来源:互联网 发布:dota2台词 知乎 编辑:程序博客网 时间:2024/06/06 18:29
--------UITableView
1.UITableView基本介绍
在iOS中,要实现表格数据展示,最常用的做法就是使用UITableView,UITableView继承于UIScrollView,这样的继承关系使得表视图可以实现上、下滚动。
UITableview有分组和不分组两种样式,可以在storyboard或者是用代码设置。
/*设置表视图的样式:
UITableViewStylePlain 平铺
UITableViewStyleGrouped 分组
*/
2.UITableview数据展示
数据源方法(UITableviewDataSource):实例化表视图时,必须要实现它的数据源方法,以此来完成表中数据的配置(一般来说数据源方法是用来配置表中的数据)
委托方法(UITableviewDelegate):表视图的委托方法(代理方法),一般是处理表视图基本样式(单元格的高度)以及捕捉选中单元格选中事件等
展示数据的过程:
(1)调用数据源的下面⽅法得知⼀一共有多少组数据
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
(2)调用数据源的下面⽅法得知每一组有多少行数据
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
(3)调⽤数据源的下⾯⽅法得知每⼀⾏显示什么内容
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
3.UITableViewCell的性能问题和cell的重用代码演示
存在问题:cell的工作 ——在程序执行的时候,能看到多少条,它就创建多少条数据,如果视图滚动那么再创建新显示的内容。(系统自动调用)。即当一个cell出现在视野范围内的时候,就会调用创建一个cell。这样的逻辑看上去没有什么问题,但是真的没有任何问题吗?
当创建调用的时候,我们使用nslog打印消息,并打印创建的cell的地址。我们发现如果数据量非常大,用户在短时间内来回滚动的话,那么会创建大量的cell,一直开辟空间,且如果是往回滚,通过打印地址,我们会发现它并没有重用之前已经创建的cell,而是重新创建,开辟新的存储空间。
解决方法:cell的重用
(1) iOS设备的内存有限,如果用UITableView显示成千上万条数据,就需要成千上万个UITableViewCell对象的话,那将会耗尽iOS设备的内存。要解决该问题,需要重用UITableViewCell对象
(2)重⽤原理:当滚动列表时,部分UITableViewCell会移出窗口,UITableView会将窗口外的UITableViewCell放入一个对象池中,等待重用。当UITableView要求dataSource返回 UITableViewCell时,dataSource会先查看这个对象池,如果池中有未使用的 UITableViewCell,dataSource则会用新的数据来配置这个UITableViewCell,然后返回给 UITableView,重新显示到窗口中,从而避免创建新对象。这样可以让创建的cell的数量维持在很低的水平,如果一个窗口中只能显示5个cell,那么cell重用之后,只需要创建6个cell就够了。
(3)注意点:还有⼀个非常重要的问题:有时候需要自定义UITableViewCell(用⼀个子类继承UITableViewCell),而且每⼀行⽤的不一定是同一种UITableViewCell,所以一个UITableView可能拥有不同类型的UITableViewCell,对象池中也会有很多类型的 UITableViewCell,那么UITableView在重⽤用UITableViewCell时可能会得到错误类型的 UITableViewCell
解决方法:UITableViewCell有个NSString *reuseIdentifier属性,可以在初始化UITableViewCell的时候传入一个特定的字符串标识来设置reuseIdentifier(一般用UITableViewCell的类名)。当UITableView要求dataSource返回UITableViewCell时,先通过一个字符串标识到对象池中查找对应类型的UITableViewCell对象,如果有,就重用,如果没有,就传入这个字符串标来初始化⼀一个UITableViewCell对象。
cell的重用代码演示:
注意:1、autorelease放的地方要注意:确保alloc对应一个autorelease,在括号里面写
2、为了确保数据的实时性,数据的赋值应该在括号外面
3、在添加子视图的时候,为了确保视图只被加一次,需要在括号里面写
UITableViewCell的类型:
UITableViewCellStyleDefault:系统会提供两个子视图给我们,一个是textLabel,还有一个可选的imageView,左侧显 示imageView,右侧显示textLabel
UITableViewCellStyleValue1:系统会提供三个视图给我们,两个Label,分别是textLabel、detailTextLabel,textLabel显示在左侧,detailTextLabel显示在右侧,那么如果imageView要显示,则它会显示在最左侧
UITableViewCellStyleValue2:不可以显示imageView
UITableViewCellStyleSubtitle:imageView会显示在最左侧,右侧显示两个Label,上下显示(最常用的)
cell的一些属性:
(1)设置cell的辅助视图,设置cell.accessoryView(系统提供了枚举型,也可以自定义@父类指针指向子类对象);
(2)设置cell的背景颜色,有两种方式可以设置cell的背景颜色:
通过backgroundColor和 backgroundView都可以设置cell的背景。但是backgroundView的优先级比 backgroundColor的高,所以如果同时设置了backgroundColor和backgroundView,那么backgroundView会盖住backgroundColor
示例:cell.backgroundColor = [UIColor blueColor];
(3)设置cell默认状态的背景
示例1:
UIView *view = [[UIView alloc] init];
view.backgroundColor = [UIColor blueColor];
cell.backgroundView = view;
示例2:
UIImageView *iv = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"buttondelete"]];
cell.backgroundView = iv;(父类指针指向子类对象,可以使用图片用简单的操作设置绚丽的效果)
(4)设置cell选中状态的背景
示例:
UIView *view2 = [[UIView alloc] init];
view2.backgroundColor = [UIColor purpleColor];
cell.selectedBackgroundView = view2;
- UITableView性能优化及使用总结
- UITableView使用总结和性能优化
- UITableView使用总结和性能优化
- UITableview性能优化总结
- UITableview性能优化总结
- UITableview性能优化总结
- iOS - UITableView性能优化总结
- 性能优化-UITableView的优化使用
- 优化UITableView性能
- 如何优化UITableView性能
- 优化UITableView性能
- 优化UITableView性能
- 优化UITableView的性能
- 优化UITableView性能
- 优化UITableView性能
- 优化UITableView 性能
- 优化UITableView性能
- 优化UITableView性能
- 蓝桥杯 歌赛新规 暴力枚举
- android开发 - tween动画
- java上下文理解
- dtd初学简介
- android开发 - ViewPager使用
- UITableView性能优化及使用总结
- poj 1177 || HDU 1828 Picture (线段树扫描线求 图形并的周长)
- 第2章 10
- 一个有趣的问题:ls -l显示的内容中total到底是什么?
- POJ1236—— Network of Schools
- struts2中 # % $ 的区别和用法
- NopCommerce多商城设置
- 第一次FLEX实验单新鲜出炉
- poj 3907 Build Your Home 多边形面积