【问题标题】:return type from init methods in Objective-C [duplicate]Objective-C中init方法的返回类型[重复]
【发布时间】:2014-03-20 20:08:42
【问题描述】:

我在编写 Objective-C 类时使用了以下便捷的方法结构:

+ (MyClass *) myClass {
    return [[[self alloc] init] autorelease];
}

- (id) init {
    if (self = [super init]) {
        // set-up code here...
    }
    return self;
}

有什么理由为什么便捷方法应该指定返回类型MyClass*而不是id?或者init 方法应该指定任一返回类型?

这似乎是 Objective-C 代码中的常见模式。直到现在才真正考虑过。

【问题讨论】:

    标签: objective-c return-type convenience-methods


    【解决方案1】:

    最好的选择是返回 instancetype - 一个上下文关键字,可以用作结果类型来表示方法返回相关的结果类型。
    查看this post on NSHipster.

    【讨论】:

      【解决方案2】:

      我认为instancetype 现在是建议的方法:

      + (instancetype) myClass {
          return [[[self alloc] init] autorelease];
      }
      
      - (id) init {
          if (self = [super init]) {
              // set-up code here...
          }
          return self;
      }
      

      【讨论】:

      • LLVM 将自动将-(id)init... 方法(以及其他方法)提升为instancetypeclang.llvm.org/docs/…
      • @edelaney05 - 是的,但它不会自动更新他的自定义 myClass 方法的返回类型。这就是为什么我们不必将 instancetype 放在 init 方法上,而是在他的自定义调用上这样做。
      • 以防万一有人想知道,如果“第一个单词是“alloc”或“new”,并且方法是类方法,或者第一个单词是“autorelease”,将自动返回instancetype的方法”、“init”、“retain”或“self”,方法是实例方法。”
      • 是的!我们意见一致。我只是在澄清您为什么选择使用instancetype 作为类方法而不是初始化程序。
      猜你喜欢
      • 1970-01-01
      • 2011-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多