为什么在UITableViewCell标识符中使用static关键字?

我已经多次阅读了“静态”,包括在发布这个问题之前。 我仍然在寻找一个“啊哈”。

在我看过的每一段代码中,在UITableView的静态语言中都会出现在单元标识符中。 例如在最近的CellForRowAtIndexPath中:

static NSString *defaultIndentifier = @"Managed Object Cell Identifier"; 

我的问题是为什么我们需要和使用“静态”?

所以它只会被构造一次。 如果不是静态的,那么每次发送消息时都会做出一个(这是很多的)

这里没有真正的好处。 这对读者来说只是一个暗示,在这个特定位的代码中所有的单元格都使用相同的值。 由于标识符本身是一个常量string,它被编译成一个不可变的内存块,并且每次被引用为相同的指针,例如,即使删除static关键字,构造string也没有任何代价。

我的猜测是,通过声明该string为静态的,每当它被传递到-dequeueReusableCellWithIdentifier:CellIdentifierforIndexPath:每次使用相同的指针(因为静态声明的variables在堆上只分配一次,在程序执行的很早)

[NSString -isEqualToString:]最有可能实现首先执行一个指针比较,然后是一个字符明智的比较作为后备,我认为可以削减每个迭代几个周期。

(a)表格单元重新填充在通常非常小的一组单元上运行,并且被优化,(b)表格刷新是突发的 – 它发生一次,然后不发生再次发生,直到用户滚动或应用程序逻辑更改内容 – 如果最终-reloadTable调用-reloadTable 100次,那么显然应用程序逻辑有问题。

我怀疑静态关键字是一个遗留的惯例 – 也许早在今天,苹果就在指针,而不是执行一个适当的string比较。