UITableView 相关面试问题

代码地址

table的重用机制:

    1. 首次加载view会根据屏幕大小和给定的预估高度确定cell的个数,然后预估cell个数添加到重用池中  

        ViewReuserPool 是继承NSObject的一个类 负责处理重用视图的读取
        `
           // 向重用池添加一个试图
           - (void)addUsingView:(UIView *)view;

            - (void)addUsingView:(UIView *)view
            {
                  if (view == nil) {
                      return;
            }
                [_usingQueue addObject:view];
            }
          `
     2.当view 刷新数据源的时候将重用池里面的视图    标记为可重用状态
      
          `- (void)reset
        {
              UIView * view = nil;
              while ((view = [_usingQueue anyObject])) {
              // 从使用队列移除
              [_usingQueue removeObject:view];
              // 加入等待队列
              [_waiteUsedQueue addObject:view];
              }
          }
      `
      3.获取数据源,根据数据源的个数创建对应的cell,当重用池有可重用cell 就取出来,没有就创建新的视图添加到可重用池中
      `    for (int i = 0; i < [arrayTitles count]; i++) {
          NSString * title = arrayTitles[i];
    
        // 从重用池 取出一个Button
            UIButton * button  = (UIButton *)[reuserPool              dequeueReuserableView];
           if (button == nil) {
           button = [[UIButton alloc] initWithFrame:CGRectZero];
           button.backgroundColor = [UIColor whiteColor];
           // 注册button到重用池中
           [reuserPool addUsingView:button];
          NSLog(@"创建了一个按钮");
       }else
       {
           NSLog(@"Button 重用了");
        }
       [containerView addSubview:button]; `
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容