为什么手动重用的UITableViewCell在重新加载行时消失?

为什么手动重用的UITableViewCell在重新加载行时消失?,uitableview,reuseidentifier,Uitableview,Reuseidentifier,如果我使用reuseidentifier=nil将一个固定的UITableViewCell作为ivar,并返回特定行的此实例,然后使用[tableView reloadRowsAtIndexPaths:withRowAnimation:专门重新加载此行,则行内容将消失(有时会闪烁)。当我来回滚动时,它再次可见。另一方面,如果我执行[tableView reloadData],它将不会消失 为什么在我重新加载行时它会消失 当我重新装填整张桌子的时候,为什么不呢 以下是一个示例项目: 我在iOS

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

  • 为什么在我重新加载行时它会消失
  • 当我重新装填整张桌子的时候,为什么不呢
以下是一个示例项目:

我在iOS 6上测试了这个。
我知道,通常不建议以这种方式手动重用UITableViewCell(不使用reuseidentifier和出列),但在一些相当静态的场景中,它会简化事情。

苹果公司对UITableView进行了优化,这样它使用了相当小的内存量,但在电池出现在屏幕上时仍然具有良好的性能。当你做了一些像这样的非标准的事情,并且绕过了优化,你就把整个机器弄得乱七八糟。以下是我的建议。如果有一行是作为实例变量保存的,为什么不简单地为它的reuseIdentifier指定一个唯一的名称呢?让工具包来解决这个问题。

reuseIdentifier
设置为等于
nil
不是一个好的做法。始终使用字符串/名称初始化
reuseIdentifier
cellforrowatinexpath
通过查看行的
重用标识符来重新加载行。如果使用现有的
reuseIdentifier
查找缓存的单元格,它将直接显示这些单元格,而无需分配和初始化新的单元格。使其
nil
会导致问题。所以,制作
reuseidentifier=@“cell”
或您喜欢的东西。这会解决你的问题