【问题标题】:UITableViewCell memory allocationUITableViewCell 内存分配
【发布时间】:2016-09-09 07:26:26
【问题描述】:

我不确定使用reuseIdentifier static 或不在tableView delegate 方法内的tableView 内存分配过程。

假设如果我们有 20 个从方法 numberOfRowsInSection 方法返回的数组,那么通过一次调用 [UITableViewCell alloc] alloc 方法,在 cellForRowAtIndexPath 方法之后将在内存中分配多少 cell

示例代码:

(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return 20;   // array count
}

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

    static NSString *MyIdentifier = @"MyIdentifier";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];

    if (cell == nil){ cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:MyIdentifier]; 
        // how many cell will be alloc here
    }

// configure cell
}

感谢您抽出宝贵时间提供任何有用的说明。

【问题讨论】:

  • 行的Height 是什么?
  • @pkc456 heightdefault 提供,感谢您的宝贵时间..
  • 我尝试将此添加为评论,但它太长了。所以请检查我的answer

标签: objective-c uitableview memory-management


【解决方案1】:

最初,当您的表格视图首次在视图上可见时(比如一次在屏幕上显示 5 个单元格),将分配 5 个单元格。当您向下滚动时,表格视图不是实例化新的,而是使用dequeueReusableCellWithIdentifier 重用现有的。所以这意味着 5 个单元仅在内存中。

因此,UITableView 通常allocate 将刚好足够UITableViewCell 对象来显示表格中可见的内容。

这种设计模式被称为Object Pooling

【讨论】:

  • 很好的解释 +1 :)
  • @JaywantKhedkar 很高兴为您提供帮助
【解决方案2】:

您可以使用[tableView visibleCells] count],它返回可见的表格单元格的数量,然后将分配多少单元格。当您向下滚动时,表视图不是创建新的 tableviewcell,而是使用 dequeueReusableCellWithIdentifier 重用现有的。dequeueReusableCellWithIdentifier 有助于使用更少的内存。
示例:
如果屏幕可以容纳 5 个表格单元格,那么重复使用您只需在内存中分配 5 个表格单元格,即使表格有 1000 个条目。

【讨论】:

  • 感谢@nssam,我把这行代码放在哪里计算可见单元格?
猜你喜欢
  • 1970-01-01
  • 2011-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多