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]; `

你可能感兴趣的:(UITableView 相关面试问题)