• 对于TableViewCell重用机制的理解


    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        
        static NSString *CellIdentifier = @"Cell";
        
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
        }
    
        NSUInteger row=[indexPath row];
        cell.textLabel.text=[dataItems objectAtIndex:row];
        return cell;
    }
    简单说就是当滑动 tableview 的时候,刚离开视图的  cell 会被放到复用池 中,等下一个 cell需要 显示时,会先看复用池中有没有 cell 如果有的时候 ,就从复用池中拿出来cell ,没有的话就重新创建cell  

    假设我们有100行数据,但在我们设计的行高情况下,屏幕 只能显示4行,所以,当加载view的时候,实际我们需要创建5个cell,只这4个cell是静态显示,当我们用手指向上滑动即下方的第5个cell向上滑进界面的过程中,我们发现第一行的cell会滑出界面,当滑出后,第一行这个cell对象会被放到对应重用标示符重用队列中,第5行显示在屏幕上。当我继续向上滑动,第二行的cell对象同样会放在重用队列中,第6个cell将获得重用队列中的一个cell,这样,这样在后面的重用中就就可以正常的工作起来了,可以很好的控制内存。

    static NSString *CellTableIdentifier = @"CellTableIdentifier ";
    是重用标示符;

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellTableIdentifier];  
    意思是定义一个cell,在tableview中的可重用队列中寻找有CellTableIdentifier标识的UITableViewCell,以进行重用。
    这个Identifier可以由我们自由定义成一些字符串。当然,如果在队列中有这样的UITableViewCell,那么则返回它给 cell,若没有,则返回nil给cell。因为我们在写程序时经常需要用到好几个表格,每个表格中的cell布局都不一样,所以我们需要将在同一个表格的cell(布局一样)进行标记Identifier,这样,在重用的时候可以得到匹配的cell。当有多个表格是可以定义多个标记。


    if (cell == nil) {
            cell = [[[UITableViewCell alloc]
                     initWithStyle:UITableViewCellStyleDefault
                     reuseIdentifier:CellTableIdentifier] autorelease];
    若返回的是nil,即cell==nil,则我们需要分配空间并初始化一个cell,而且需 要关联reuseIdentifier,以便后面重用的时候能够根据Identifier找到这个cell,若cell不为nil,则重用成功,并可 return此cell。
  • 相关阅读:
    js基础 ---- 为什么定时器时间不准确
    vue 3.0 ---- reactive函数
    vue 3.0 ---- ref函数
    vue 3.0 ---- setup函数
    vue 3.0 ---- 什么是vite
    Vue warn]: Error in event handler for "click": "TypeError: fns.apply is not a function"
    vueJs 自动清除文本框的 空格
    vue 报错解决 -------- DOMException: Failed to execute 'insertBefore' on 'Node' --------------------"NotFoundError: Failed to execute 'insertBefore' on 'Node': The node before
    vue 中 uuid 的使用以及作用
    赞不绝口钉钉自动点赞器
  • 原文地址:https://www.cnblogs.com/penger/p/4239178.html
Copyright © 2020-2023  润新知