5

如果我UITableViewCell使用reuseidentifier=nil作为ivar 保持一个固定值并为特定行返回此实例,然后专门使用重新加载此行[tableView reloadRowsAtIndexPaths:withRowAnimation:],则行内容会消失(或有时会闪烁)。当我滚动并返回时,它再次变得可见。[tableView reloadData]另一方面,如果我这样做,它不会消失。

  • 为什么当我重新加载行时它会消失?
  • 为什么不呢,当我重新加载整个表时?

这是一个示例项目:https ://github.com/hannesoid/HOTableViewTests

我在 iOS 6 上对此进行了测试。 我知道通常不建议以这种方式手动重用 UITableViewCell(没有重用标识符和出队),但在一些相当静态的场景中它会简化事情。

4

2 回答 2

1

UITableView 由 Apple 优化,因此它使用相当少量的内存,但在单元格出现在屏幕上时仍然具有良好的性能。当您执行此类非标准操作并规避优化时,您会将整台机器弄得一团糟。这是我的建议。如果您现在将一个特定的行作为实例变量保存,为什么不简单地尝试为它的重用标识符赋予一个唯一的名称呢?让套件解决它。

于 2013-08-23T19:49:22.407 回答
0

使reuseIdentifier等于不是一个好习惯nil。始终reuseIdentifier使用字符串/名称进行初始化。通过cellForRowAtIndexPath查看它们的reuseIdentifiers. 如果在现有的 中找到缓存的单元格reuseIdentifier,它将直接显示这些单元格,而不分配和初始化新的单元格。制造它nil会导致问题。所以,制作reuseidentifier=@"cell"或你喜欢的东西。这将解决您的问题。

于 2013-08-24T05:40:44.340 回答