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

j_m*_*lly 10 cocoa-touch objective-c uitableview ios

我总是看到UITableViewController申报的样板

static NSString *CellIdentifier
Run Code Online (Sandbox Code Playgroud)

- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
Run Code Online (Sandbox Code Playgroud)

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

mem*_*ons 21

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

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

  • 这不是垃圾收集,并且不恰当地使用该术语只会使不熟悉Objective-C的用户感到困惑. (5认同)
  • 虽然经验丰富的开发人员会知道你的意思,但称其为"垃圾收集"会让新开发人员感到困惑.iOS没有垃圾收集.它有自动释放池和ARC,它们的实现方式不同,并对垃圾收集器进行了不同的权衡. (3认同)