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

发布于 2024-12-17 10:04:04 字数 1435 浏览 0 评论 0原文

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?为什么不直接使用字符串文字,如下所示?

    // 自定义表格视图单元格的外观。
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {        
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
        如果(单元格==零){
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:@"Cell"];
            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
        }
    
        [自我配置Cell:索引路径处的单元格:索引路径];
        返回单元格;
    }
    
  2. 什么时候应该对 NSStringNSObject、标量(NSIntegerCGFloat 等)使用静态而不是文字.) 等?

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

The Master-Detail Xcode Project Template generates code like:

// 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. Why declare the NSString as static? Why not just use the string literal, like below?

    // 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. When should I use static over literals with NSString, NSObject, scalors (NSInteger, CGFloat, etc.), etc.?

  3. Is it more performant to use a literal NSInteger rather than defining a static variable that points to it and using that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

揪着可爱 2024-12-24 10:04:04

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

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

The static allows you to define only one instance of the NSString object to be used. If you used the string literal instead, there's no guarantee that only one object will be created; the compiler may instead end up allocating a new string every time the loop is called, and then passing that to the dequeue method, which will use string comparison to check if any cell is available.

In practice, there's no difference; both static or literal will work fine. But with the static you're telling Obj-C that it should use the same instance every time. Although for this case this would very unlikely cause any problems for you, it's good practice to use static if you plan to always use the same object.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文