什么是为CellIdentifier使用静态NSString的优势?

时间:2013-03-12 20:06:32

标签: ios objective-c cocoa-touch uitableview

我总是看到UITableViewController声明的样板

static NSString *CellIdentifier

- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath

为何静电?我在很多地方都改变了这一点,因为CellIdentifier根据该部分进行了更改?这是静态背后的原因吗?我会影响表现吗?

3 个答案:

答案 0 :(得分:21)

cellForRowAtIndexPath:被称为很多。无论何时你有一个在很短的时间内反复调用的方法,你想要最小化等待自动释放的对象的数量,因为这些对象将被保留在堆栈中,直到 - 至少 - 下一个循环。使用静态字符串可确保只创建一次字符串对象,而不是每次调用该方法。

这并非严格必要,但是当您在移动设备上拥有有限的内存量时,您希望尽可能优化在短时间内创建的对象数量。

答案 1 :(得分:3)

当声明变量static时,程序中只有该变量的一个实例。由于这是一个仅分配一次的常量值,因此该方法避免为其保留和分配堆栈变量。当然,堆栈变量几乎肯定是由编译器优化的,并且字符串包含已经被编译器优化为静态存储。所以这是一个非常小的优化,它与开发人员意味着什么(即所有实例共享相同的值)一样暗示其他任何东西。

答案 2 :(得分:1)

虽然我同意@Answerbot关于静态字符串的性能方面,但值得注意的是静态字符串不易出错。 IDE将自动完成静态NSString对象,从而保证字符串的命名一致。

编辑:

如果您使用以下代码:

static NSString *cellIndentifier = @"myCellIdentifier";

然后您可以自由使用变量'cellIdentifier'而无需担心正在使用的实际字符串的拼写。

相关问题