这篇文章将为大家详细讲解有关替换在iOS中使用UITableView的重用机制,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
UITableView可以说是UIKit中最重要的一个组件,用来展示数据列表,还可以灵活使用进行页面的布局.UITableView的使用遵循MVC模式,数据模型(NSObject),视图(UIView)和控制器(UITableViewController)分离.UITableView继承自UIScrollView,可上下滑动,可以作为跟视图也可以作为子视图组件。
reuseIdentifier顾名思义是一个复用标识符,是一个自定义的独一无二的字符串,用来唯一地标记某种重复样式的可复用UITableViewCell,系统是通过reuseIdentifier来确定已经创建了的指定样式的细胞来进行复用,iOS中表格的细胞通过复用来提高加载效率,因为多数情况下表格中样的细胞式都是重复的,只是数据模型不同而已,因此系统可以在保证创建足够数量的细胞铺满屏幕的前提下,通过保存并重复使用已经创建的细胞来提高加载效率和优化内存,避免不停地创建和销毁细胞元素。
UITableViewCell的复用原理其实很简单,可以通过下面一个简单的例子来理解:
首先在开发中我们在UITableViewController类中写细胞复用代码的最基本模板会像下面这样:
/* * ,*可复用细胞制作 ,*/安康;(UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath {//,才能定义细胞重用的静态标志符 static 才能;NSString * cell_id =, @" cell_id_demo";//才能,优先使用可复用的细胞 UITableViewCell 才能;* cell =, [tableView dequeueReusableCellWithIdentifier cell_id):;//才能,如果要复用的电池还没有创建,则创建一个供之后复用 if 才能;(cell ==, nil), { ,,,//,新创建细胞并使用cell_id复用符标记 ,,,cell =, [[UITableViewCell alloc], initWithStyle: UITableViewCellStyleDefault reuseIdentifier: cell_id); ,,}//,才能配置细胞数据 cell.textLabel.text 才能=,[NSString stringWithFormat: @"细胞%我,,countNumber);//才能,其他细胞设置… return 才能;细胞; }
代码这样写的原因是通过调用当前视图的dequeueReusableCellWithIdentifier方法看指定的reuseIdentifier是否有可以重复使用的了,如果有则会返回可复用的细胞,细胞就绪之后便可以开始更新细胞的数据,如果还不可复用,则返回零,然后会进入后面如果语的句,此时创建新的细胞并对其设置细胞样式标记reuseIdentifier。注意上面的如果语句并不是只要执行一次创建一次新的细胞就完成任务,然后之后全部重复利用新创建的那一个细胞,这是对细胞复用机制的误解。
事实是要创建足够数量的可覆盖整个视图的可复用细胞之后才会开始复用之前的(UITableView中有一个visiableCells数组保存当前屏幕可见的细胞,还有一个reusableTableCells数组用来保存那些可复用的细胞),这个我们用下面的测试来验证。
如何简洁清楚的展示UITableViewCell的复用机制呢?这里的方法是创建最基本的文本细胞,并创建一个细胞创建计数器,每次新创建细胞计数器加1并显示在细胞上,如果是复用的细胞则会显示是复用的哪一个细胞,测试代码如下:
/* * ,*分区个数设置为1 ,*/安康;(NSInteger) numberOfSectionsInTableView:(UITableView *) tableView { return 才能;1; }/* * ,*创建20个细胞,保证覆盖并超出整个视图 ,*/安康;(NSInteger) tableView: (UITableView *) tableView numberOfRowsInSection:也(NSInteger) section { return 才能;20; }/* * *大敌;细胞复用机制测试 ,*/安康;(UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath {//,才能定义细胞重用的静态标志符 static 才能;NSString * cell_id =, @" cell_id_demo";//才能,计数用 static 才能int countNumber =, 1;//才能,优先使用可复用的细胞 UITableViewCell 才能;* cell =, [tableView dequeueReusableCellWithIdentifier cell_id):;//才能,如果要复用的电池还没有创建,则创建一个供之后复用 if 才能;(cell ==, nil), { ,,,//,新创建细胞并使用cell_id复用符标记 ,,,cell =, [[UITableViewCell alloc], initWithStyle: UITableViewCellStyleDefault reuseIdentifier: cell_id); ,,,//,计数器标记新创建的细胞 ,,,cell.textLabel.text =, (NSString stringWithFormat: @"细胞%我,,countNumber); ,,,//,计数器递增 ,,,countNumber + +; ,,} return 才能;细胞; }替换在iOS中使用UITableView的重用机制