此字符串充当表示某种表单元的键。在此表中,我们将只使用一种单元,因此定义一种标识符就可以了。表视图在iPhone的小屏幕上一次只能显示几行,但是表自身能够保存相当多的数据。记住,表中的每一行都由一个UITableViewCell实例表示,该实例是UIView的一个子类,这就意味着每一行都能拥有子视图。对于大型表来说,如果视图为表中的每一行都分配一个表视图单元,不管该行当前是否正被显示,这都将带来大量开销。幸好表并不是这样工作的。
相反,因滚动操作离开屏幕的一些表视图单元,将被放置在一个可以被重用的单元序列中。如果系统运行比较慢,表视图就从序列中删除这些单元,以释放存储空间,不过,只要有可用的存储空间,表视图就会重新获取这些单元,以便以后再次使用它们。
当一个表视图单元滚出屏幕时,另一个表视图单元就会从另一边滚动到屏幕上。如果滚动到屏幕上的新行重新使用从屏幕上滚动下来的其中一个单元,系统就会避免与不断创建和释放那些视图相关的开销。要充分利用此机制,我们需要让表视图给定一个出列单元,该出列单元正是我们需要的类型。注意,我们现在正在使用前面声明的NSString标识符。实际上,我们需要一个SimpleTableIdentifier类型的可重用单元:
现在,表视图中可能没有任何多余的单元了,我们来检查这些cell,看一下它是否为零(nil)。如果是,则使用上面提到的标识符字符串手动创建一个新的表视图单元。从某种程度上来说,我们将不可避免地重复使用此处创建的单元,因此需要确保它具有相同的类型。
现在,我们拥有了一个可以返回到表视图的表视图单元。下面所有要做的就是把需要显示的信息放在该表视图单元中。在表的一行内显示文本是很常见的任务,因此表视图单元提供了一个名称为text的属性,我们可以设置此属性以显示字符串。对于这种情况,我们需要从listData数组中获取正确的字符串,然后使用它设置表视图单元的text属性。
要完成上述操作,需要知道表视图需要显示哪些行。可以从indexPath变量获取该信息,如下所示:
如果你被难住了,那么给你一个提示:我们使用了一个名为CGRectZero的常量,它是Core Graphics框架的一部分。默认情况下,Core Graphics框架没有连接到项目。如果你忘记如何将它连接进来的话,可以参见第5章,其中逐步地介绍了此过程。解决这个问题后,就可以成功完成编译了。运行应用程序,你将看到显示在表视图中的数组值(参见图8-7)。