13

根据clang 文档,当返回的方法是以 or开头的类方法或以、、或开头的实例方法时,id隐式知道该方法返回。instancetypenewallocretainautoreleaseinitself

为了一致性起见,这些方法是否也应该写成instancetype在新代码中显式返回?

- (instancetype)init {
    self = [super init];
    if (self) {
        // perform initialization
    }
    return self;
}

是否有任何文件说明为什么或为什么不,或任何推理?似乎在这种情况下,它对编译器的解释完全相同。

4

1 回答 1

19

实际上没有必要,因为编译器会自动将此类方法instancetype有效地提升为返回(如您所述)。

这种自动推理记录在 llvm 文档中。

亲自?我总是将它们声明为instancetype明确的,因为它准确地描述了合同,并且使以后的重构更容易。

于 2013-05-30T21:25:54.087 回答