我总是看到UITableViewController
声明的样板
static NSString *CellIdentifier
在
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
为何静电?我在很多地方都改变了这一点,因为CellIdentifier
根据该部分进行了更改?这是静态背后的原因吗?我会影响表现吗?
答案 0 :(得分:21)
cellForRowAtIndexPath:
被称为很多。无论何时你有一个在很短的时间内反复调用的方法,你想要最小化等待自动释放的对象的数量,因为这些对象将被保留在堆栈中,直到 - 至少 - 下一个循环。使用静态字符串可确保只创建一次字符串对象,而不是每次调用该方法。
这并非严格必要,但是当您在移动设备上拥有有限的内存量时,您希望尽可能优化在短时间内创建的对象数量。
答案 1 :(得分:3)
当声明变量static
时,程序中只有该变量的一个实例。由于这是一个仅分配一次的常量值,因此该方法避免为其保留和分配堆栈变量。当然,堆栈变量几乎肯定是由编译器优化的,并且字符串包含已经被编译器优化为静态存储。所以这是一个非常小的优化,它与开发人员意味着什么(即所有实例共享相同的值)一样暗示其他任何东西。
答案 2 :(得分:1)
虽然我同意@Answerbot关于静态字符串的性能方面,但值得注意的是静态字符串不易出错。 IDE将自动完成静态NSString对象,从而保证字符串的命名一致。
编辑:
如果您使用以下代码:
static NSString *cellIndentifier = @"myCellIdentifier";
然后您可以自由使用变量'cellIdentifier'而无需担心正在使用的实际字符串的拼写。