gpt4 book ai didi

objective-c - NSString:为什么使用静态而不是文字?

转载 作者:太空狗 更新时间:2023-10-30 04:00:28 25 4
gpt4 key购买 nike

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;
}
  1. 为什么要将 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;
    }
  2. 我什么时候应该在 NSStringNSObject、标量(NSIntegerCGFloat 等)等?

  3. 使用文字 NSInteger 比定义一个指向它并使用它的静态变量是否更高效?

最佳答案

static 允许您只定义一个要使用的 NSString 对象实例。如果您改用字符串文字,则无法保证只会创建一个对象;编译器可能会在每次调用循环时分配一个新字符串,然后将其传递给 dequeue 方法,该方法将使用字符串比较来检查是否有可用的单元格。

在实践中,没有区别;静态或文字都可以正常工作。但是对于 static 你是在告诉 Obj-C 它应该每次都使用相同的实例。虽然对于这种情况,这不太可能给您带来任何问题,但如果您打算始终使用同一对象,则使用静态是一种很好的做法。

关于objective-c - NSString:为什么使用静态而不是文字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8216083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com