Master-Detail Xcode项目模板生成如下代码:
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
[self configureCell:cell atIndexPath:indexPath];
return cell;
}
为什么要将NSString
声明为static
?为什么不使用字符串文字,如下所示?
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
[self configureCell:cell atIndexPath:indexPath];
return cell;
}
我应该何时使用静态文字与NSString
,NSObject
,scalors(NSInteger
,CGFloat
等),等等。 >
使用文字NSInteger
而不是定义指向它并使用它的静态变量是否更高效?
答案 0 :(得分:8)
static允许您只定义要使用的NSString对象的一个实例。如果您使用了字符串文字,则无法保证只创建一个对象;编译器可能会在每次调用循环时最终分配一个新字符串,然后将其传递给dequeue方法,该方法将使用字符串比较来检查是否有任何单元格可用。
在实践中,没有区别; static或literal都可以正常工作。但是对于静态,你告诉Obj-C每次都应该使用相同的实例。虽然对于这种情况,这不太可能导致任何问题,但如果您打算始终使用相同的对象,则使用静态是一种好习惯。