【问题标题】:Obj-C: [NSString stringWithString:@"string"] vs. @"string"Obj-C: [NSString stringWithString:@"string"] vs. @"string"
【发布时间】:2011-06-08 14:56:30
【问题描述】:

我见过有人做类似[NSString stringWithString:@"some string"] 的事情。为什么不直接@"some string"

例如,查看facebook-ios-sdk

+[NSString stringWithString:] -- what's the point? 是一个类似的问题,但没有一个答案是 [NSString stringWithString:@"some string"]@"some string"

【问题讨论】:

  • [NSString stringWithString:@"some string"] 从只读内存复制@"some string",这是在可执行文件中烘焙的,但由于 NSString 无论如何都是不可变的,我也看不出重点。
  • @WTP,不-它什么都不做。查看@Sven 的回答
  • 现在我们必须使用@"some string",否则我们会收到警告“Using 'stringWithString': with a literal is冗余”

标签: objective-c cocoa-touch ios nsstring stringwithstring


【解决方案1】:

其实没有区别。 [NSString stringWithString: str] 什么都不做,如果 str 已经不可变,则返回 str

【讨论】:

    【解决方案2】:

    除了需要额外的击键外,没有其他区别。事实上,使用常量字符串作为参数(或不可变字符串),您只需获得另一个指向该参数的指针。

    该方法的主要用途是在子类中:

    [NSMutableString stringWithString: @"fdghdfjl"];
    

    会给你一个可变的自动发布的原始副本。

    【讨论】:

    • 它也被用作[[someString copy] autorelease] 的替代品——也就是说,它保证你有一个非拥有的不可变字符串——我认为有些人觉得它更具可读性。
    【解决方案3】:

    关于stringWithString: 需要注意的一点是,如果源字符串为 nil,它将引发异常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-17
      • 2012-01-06
      • 2015-07-02
      • 2011-07-26
      • 1970-01-01
      • 1970-01-01
      • 2016-11-06
      • 1970-01-01
      相关资源
      最近更新 更多