OC中UITableView创建及原理
来源:互联网 发布:淘宝hd 微淘 编辑:程序博客网 时间:2024/06/05 02:54
iOS设备的内存有限,如果用UITableView显示成千上万条数据,就需要成千上万个UITableViewCell对象的话,那将会耗尽iOS设备的内存。要解决该问题,需要重用UITableViewCell对象
重用原理:当滚动列表时,部分UITableViewCell会移出窗口,UITableView会将窗口外的UITableViewCell放入一个对象池中,等待重用。当UITableView要求dataSource返回UITableViewCell时,dataSource会先查看这个对象池,如果池中有未使用的UITableViewCell,dataSource会用新的数据配置这个UITableViewCell,然后返回给UITableView,重新显示到窗口中,从而避免创建新对象
还有一个非常重要的问题:有时候需要自定义UITableViewCell(用一个子类继承UITableViewCell),而且每一行用的不一定是同一种UITableViewCell(如短信聊天布局),所以一个UITableView可能拥有不同类型的UITableViewCell,对象池中也会有很多不同类型的UITableViewCell,那么UITableView在重用UITableViewCell时可能会得到错误类型的UITableViewCell
解决方案:UITableViewCell有个NSString *reuseIdentifier属性,可以在初始化UITableViewCell的时候传入一个特定的字符串标识来设置reuseIdentifier(一般用UITableViewCell的类名)。当UITableView要求dataSource返回UITableViewCell时,先通过一个字符串标识到对象池中查找对应类型的UITableViewCell对象,如果有,就重用,如果没有,就传入这个字符串标识来初始化一个UITableViewCell对象
重用UITableViewCell对象
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *identifier = @"UITableViewCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier] autorelease];
}
cell.textLabel.text = [NSString stringWithFormat:@"Text %i", indexPath.row];
return cell;
}
重用原理:当滚动列表时,部分UITableViewCell会移出窗口,UITableView会将窗口外的UITableViewCell放入一个对象池中,等待重用。当UITableView要求dataSource返回UITableViewCell时,dataSource会先查看这个对象池,如果池中有未使用的UITableViewCell,dataSource会用新的数据配置这个UITableViewCell,然后返回给UITableView,重新显示到窗口中,从而避免创建新对象
还有一个非常重要的问题:有时候需要自定义UITableViewCell(用一个子类继承UITableViewCell),而且每一行用的不一定是同一种UITableViewCell(如短信聊天布局),所以一个UITableView可能拥有不同类型的UITableViewCell,对象池中也会有很多不同类型的UITableViewCell,那么UITableView在重用UITableViewCell时可能会得到错误类型的UITableViewCell
解决方案:UITableViewCell有个NSString *reuseIdentifier属性,可以在初始化UITableViewCell的时候传入一个特定的字符串标识来设置reuseIdentifier(一般用UITableViewCell的类名)。当UITableView要求dataSource返回UITableViewCell时,先通过一个字符串标识到对象池中查找对应类型的UITableViewCell对象,如果有,就重用,如果没有,就传入这个字符串标识来初始化一个UITableViewCell对象
重用UITableViewCell对象
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *identifier = @"UITableViewCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier] autorelease];
}
cell.textLabel.text = [NSString stringWithFormat:@"Text %i", indexPath.row];
return cell;
}
阅读全文
0 0
- OC中UITableView创建及原理
- OC中Block的原理、实现及注意事项
- OC中关键字的介绍及原理分析
- 【OC】IOS7中UITableView的变化
- 1.c++中与oc中类和对象创建及访问
- oc内存管理中retain属性对应的setter实际语法代码实现及原理
- OC SEL (@selector) 原理及使用总结
- UITableView原理
- oc中类的函数及怎么创建类的格式
- OC 类的创建及初始化方法
- UITableView创建
- UITableView创建
- UItableView创建
- OC-002.OC中如何创建一个类
- iOS中OC:block底层实现原理
- UITableView的原理,编辑及UIViewController的建立
- OC中创建字符串的几种方法及Xcode7.3中其存储内存地址的异同
- OC中多线程的创建方法
- 多线程-实现Runnable接口的方式卖电影票案例
- [方差+lucas定理] 51nod 算法马拉松25 D. 小Q的集合
- LonLife-ACM 1129
- 3Sum Closest
- Java并发编程实战--通过线程转储信息来分析死锁
- OC中UITableView创建及原理
- 在java中String a=""和String a=null的差别
- 递归2 用递归求和。1+2+3+4+....n.
- 一行代码实现Android软键盘与EditText的交互
- 递归3 递归函数求n的阶乘
- 编程练习(第十五周)
- 物联网 云平台 云计算 编程语言 博文集锦
- 烧写系统到NanoPC-T2的eMMC不能成功的解决方法
- iOS中App切换状态原理