就像视图中的每个可见按钮都需要一个 UIButton 实例一样,每个可见行都需要一个单元格实例。
管理此问题的常见模式是向 tableview 询问不再需要的先前实例化的单元格 ( dequeueReusableCellWithIdentifier:
),然后返回该单元格。如果表格视图没有任何可重复使用的单元格,则必须从 nib 文件中实例化一个新单元格。
网上有很多关于这方面的例子,你也可以在 SO 上找到一些例子,例如在这个答案中。
我建议您通读 Apples TableView Programming Guide,其中还包含有关从 nib 加载单元的部分。
更新:尝试以不同的方式解释 TableView 和单元格的重用。
假设我们有一个带有旧画的大型画廊。数以万计的画作。不过,画廊只有一间展示室,墙壁上只有十幅画作。当参观者感到无聊并想看一些新画作时,画廊经理不得不不时更换画作。
每幅展示的画都需要一个框架。没有框架,它不能放在墙上。框架的制造成本很高,并且占用大量空间。框架制造商希望有时间和金钱来构建所需的数千个框架。
他发现他想要所有目前未展示的画作都需要框架。他现在展示的画作只需要十帧。当画廊经理拿下一幅画时,画框制作者将画框存放起来,当画廊管理者放出一幅新画并要求画框制作者为其提供画框时,画框制作者又将前一幅画的画框归还。
有一天,绘画之间所需的空间规则无缘无故地改变了。画廊经理可以在陈列室里再放两张照片。他从储藏室里挑出两幅画,向画框师要画框。框架制造商没有备用框架,需要制作两个新框架。
现在,假设画廊是一个 TableView,所有的画都是数据行。有十幅可见绘画空间的展示室是屏幕,有十个可见行的空间。每个可见行都需要一个单元格,就像每个显示的画都需要一个框架一样。
最后,您不必太在意通过重用一个单元来节省资源。这是 TableViews 的责任。这是 TableView 需要多少个单元格以及如何使用它的实现细节。该协议定义了如何向 TableView 请求可重复使用的单元格,并且文档说明您应该这样做。这应该足够了。演示项目表明 TableView 可以管理非常大量的数据。如果您的项目由于从 nib 实例化 10-20 个单元格而在性能方面遇到困难,那么您的 nib 文件或其他东西可能存在一些问题。但是,有一些讨论是关于从 nib 加载与在代码中构建单元格的性能。你可能会感兴趣。