为什么Apple改变了UITableViewCell的工作顺序?

时间:2013-02-21 13:22:06

标签: ios objective-c ios6

现在我们必须在ViewDidLoad -

中的某处使用此代码
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:CellIdentifier];

并且我不确定旧方法有什么问题,通过检查单元格是否实际上由旧方法中的队列返回

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

让我感到困惑的是,为什么在不相关的地方使用一些仲裁方法调用,这是什么"注册"方法呢?

1 个答案:

答案 0 :(得分:2)

从iOS 5开始,Apple推出了一种从NIB文件中实例化细胞的快捷方法,该方法有三个阶段:

  1. 声明单元格标识符的属性
  2. 注册包含该单元格的NIB对象,并将其关联 使用单元格标识符
  3. 创建单元格本身(然后照常自定义控件)
  4. 注册NIB对象只需要在控制器的生命周期内发生一次,因此放置代码的一个显而易见的地方是在tableView控制器的viewDidLoad方法中:

    cellIdentifier = @"CustomCell";
    [tableView registerNib:[UINib nibWithNibName:@"customCell" bundle:nil]
    

    这需要两个参数:

    1. 对UINib实例的引用,通过传入获得 UINib的nibWithNibName方法
    2. 先前创建的NSString单元格标识符
    3. 在NIB注册用作单元格后,dequeueReusableCellWithIdentifier方法将执行以下两项操作之一:

      1. 如果有一个缓存的单元可供重用,它将被出列 并且可以通过单元格变量访问。
      2. 如果没有可重复使用的单元格, dequeueReusableCellWithIdentifier将创建一个 注册NIB。
      3. 这两件事都发生在幕后,因此现在不再需要手动检查单元格的存在dequeueReusableCellWithIdentifier 将为您处理所有这些